(十四)Visualization教程二

PCLPlotter类

PCLPlotter类提供了一个十分直接简单的接口,通过它可以绘制各种图表,从多项式曲线图到直方图,从而不必要在使用MATLAB等软件来绘图了。我们下面就先从简单地画一个多项式曲线开始,逐步学习PCLPlotter类。

画一个多项式曲线图

步骤

  1. 定义一个绘图器
// 定义一个绘图器
pcl::visualization::PCLPlotter * plotter = new pcl::visualization::PCLPlotter();
  1. 定义多项式
// 定义一个多项式 y = 2 + 3x + x^2. 由vector存储各项系数,从x的零次项系数开始……,所以vector应为{2,3,1}
vector<double> func1(3, 0);
func1[0] = 2;
func1[1] = 3;
func1[2] = 1;
  1. 载入多项式到绘图器中
// 将多项式载入到绘图器重,设定X轴范围,和曲线名称
plotter->addPlotData(func1, -10, 10, "y = 2 + 3x + x^2");
  1. 显示曲线
// 显示曲线
plotter->plot();

各种数据输入类型

之前在画多项式曲线图时,我们是输入一个存储多项式系数的vector来代表多项式,然后输入一个X的范围,最终做出了曲线图。除了这种输入方式,在官方文档中,我们可以看到多种数据输入方式,下面我们就举几个例子:

输入点的坐标

这是最基本的输入方式,如果你要画出一些点,并且知道他们的坐标,就可以采用这种输入方式,我们用一个vector代表一系列的(x,y)坐标:

vector<pair<double, double> > data;
populateData (data);
plotter->addPlotData (data,"cos");

从文件中读取数据

跟上一种输入方式类似,只不过是将变量和函数值存储在一个文本文件中,并且用空格隔开。第一列代表自变量,其余列表示函数值,并且文件中第一行表示各个变量名,变量名之间用空格隔开。例如,“test.txt”文本内有如下内容

x y=x^2-3 x-y
1   -2  3
2   1   1
3   6   -3
4   13  -9
5   22  -17
6   33  -27
7   46  -39
8   61  -53
9   78  -69
10  97  -87
11  118 -107
12  141 -129
13  166 -153
14  193 -179
15  222 -207
16  253 -237
17  286 -269
18  321 -303
19  358 -339
20  397 -377

代码:

// 读取文件
plotter->addPlotData(argv[1], vtkChart::POINTS);
plotter->spinOnce(30000);

结果:

多项式和有理数方程

vector<double> func1 (1,0);
func1[0] = 1;
vector<double> func2 (2,0);
func1[1] = 1;

plotter->addPlotData (std::make_pair (func1, func2),-10, 10, "y = 1/x");

指定自定义函数

用户可以自定义函数,函数必须是double映射到double的,最后在addPlotData的时候带入一个函数指针就ok了。

double
identity (double val)
{
  return val;
}
...

...
plotter->addPlotData (identity,-10, 10,"identity");

添加其他属性

可以添加其他属性,比如标题,图注,背景色等等。

plotter->setTitle ("My plot"); //global title
plotter->setXTitle ("degrees");
plotter->setYTitle ("cos");
plotter->setShowLegend (true); //show legends
...
plotter->plot ();

其他函数

猜你喜欢

转载自blog.csdn.net/jiaojialulu/article/details/69353196