利用qwtplot3d绘制3维图形

来源:互联网 发布:网络键盘侠 编辑:程序博客网 时间:2024/06/03 20:52

本文根据http://blog.csdn.net/liyuanbhu/article/details/7585471,经亲测正确运行,于是将开发步骤拿出来和大家分享。

1) pro文件:

#-------------------------------------------------## Project created by QtCreator 2017-07-30T21:16:12##-------------------------------------------------QT       += core gui openglgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = qwt3d_readArrayTEMPLATE = appSOURCES += main.cppHEADERS  +=##############################################################LIBS += -LC:/Qt/Qt5.5.0/5.5/msvc2012/lib -lqwtplot3ddDEFINES  += QT_DLL QWT3D_DLLCONFIG += opengl

2) main.cpp:

#include <QApplication>#include <qwtplot3d/qwt3d_surfaceplot.h>using namespace Qwt3D;double** allocateData(int columns, int rows){    double** data  = new double* [columns] ;    for ( int i = 0; i < columns; ++i)    {        data[i]  = new double [rows];    }    return data;}void deleteData(double**data, int columns){    for ( int i = 0; i < columns; i++)    {         delete [] data[i];     }    delete [] data;}int main(int argc, char *argv[]){    QApplication a(argc, argv);    SurfacePlot w;    int x = 10, y = 20;    double ** p = allocateData(10, 20);    for(int k = 0; k < x; k++)    {        for(int l = 0; l < y; l++)        {            p[k][l] = l;        }    }    w.loadFromData(p, x, y, 0, x, 0, y);    deleteData(p, x);    w.setRotation(30,0,15);    w.setScale(1,1,1);    w.setShift(0,0,0);    w.setZoom(0.9);    w.updateData();    w.updateGL();    w.show();    return a.exec();}

解释:

一、注意下面这句: p[k][l] = l;

k 是X方向的坐标,l 是Y方向坐标。

二、p必须是 double **类型,double[][]是不行的。

三、注意w.loadFromData(p,x,y,0,x,0,y);这句。最后的0,x表明X轴的量程,但并不是数组的列数!!你可以把量程改写为任何数字,显示的结果都是不变的,只不过坐标轴刻度变化而已。Y轴的情况也一样。



原创粉丝点击