前言
使用qt实现三维空间直角坐标系中的航迹实时绘制网上很难查到资料。在qt下实现3D绘图通常实现方式有OpenGL,VTK,qwt3d,QtDataVisualization等,Qcharts,QCustomPlot只支持2D绘图。
这里给出笔者基于QcustomPlot封装的实时曲线图和二维航迹图。
对于3D实时航迹的绘制,在QtDataVisualization下并没有找到类似的例子,而使用OpenGL和VTK实现则太复杂,坐标轴,网格,图例等都要自己画。qwt3d是一个比较老的库,很早就不更新了,但是可以实现3D坐标系的绘制和参数曲面的绘制。因此打算修改qwt3d库源码,使其可以绘制曲线。经过调研,已经有人这么做了,参考博客。在该文博主帮助下,终于实现了3D航迹图的绘制。
实现效果:
可以看到本文实现可同时显示多条航迹,具有实时增加和删除航迹,修改航迹颜色等功能。
代码实现:
修改qwt3d源码
首先按照博客 修改qwt3d源码,然后编译出lib和dll。
绘图类定义
定义一个继承自Qwt3D::SurfacePlot的类。
class QTrack3D : public Qwt3D::SurfacePlot
构造函数初始化
setPlotStyle(Qwt3D::LINE3D_STYLE);
coordinates()->setAutoScale();
//setTitle("航迹");
setIsolines(5);
rosenbrockinit();
setShift(1,0,0);
setRotation(30,0,30);
setScale(1,1,1);
setShift(0.15,0,0);
setZoom(1);
updateData();
updateGL();
其中的rosenbrockinit函数
void QTrack3D::rosenbrockinit()
{
Rosenbrock rosenbrock;
rosenbrock.setMesh(5,5);
rosenbrock.setDomain(myxMin,myxMax,myyMin,myyMax);
rosenbrock.setMinZ(myzMin);
rosenbrock.setMaxZ(myzMax);
rosenbrock.