本文已参与「新人创作礼」活动,一起开启掘金创作之路。
C++ MathGL环境搭建参考
本质上就是下载一个(动态静态)库,解压到某个文件夹,然后在换将变量和IED中包含库的路径。
MathGL官网
2D绘图没有直接的例子,只能逐条语句摸索,本例给出。
分别初始化并设置数据类和绘图类
类mglData包含MathGL中用于数据处理的所有函数,它不依赖于具体的数据类型,数据数组的大小与数据一起保存,内存工作更简单和更安全。
创建2D数据,首先指定数据的大小,即行列数,mglData中数据是平面的,所以要逐个线性填充,例如下,但是行列好像是颠倒的,结果不理想就陶正一下。
mglData z(30,40);
for(int i=0;i<30;i++) for(int j=0;j<40;j++)
z.a[i+30*j] = sin(M_PI*i/29.)*sin(M_PI*j/39.);
MathGL通常有两种绘图函数。这里使用简单变量,需要一个数据数组来绘图,其他数据(坐标)被认为是均匀分布在坐标轴范围内。
然后准备图幅,使用mglGraph类。注意一顶要旋转一下,才能得到立体的效果。
gr.SetRanges(minx , maxx , maxy ,miny , 30, 45);//确定坐标轴范围
gr.Rotate(60, 45);//旋转图形
gr.Axis();//显示数据坐标轴
gr.Box();//显示图片边框
//gr.Title("d72 v1.2 p5 tz");
//还有Plot、Barh、Mark等等可选
gr.Surf(z1);
gr.Cont(z1, "y"); // 以黄色曲线为例
//最后保存图片
gr.WritePNG("test.png"); // Don't forget to save the result!
ps:注意,这个库有bug,我一直不知道原因,我的电脑作图,如果加了标题,整个图出来时乱的。
效果
随便找了一组实验涉及的数据,绘制效果如图所示。