以前的專案裡,我曾經用qwt繪製曲線.qwt是一種基於qt的第三方外掛程式。用qwt繪製的好處是,在待繪製的樣本數較多時(〉=1000),仍然可以在很短的時間內完成繪製。本篇部落格介紹一種辦法,不再利用qwt,而是直接利用glsl來實現高速繪製曲線。這個功能封裝在類glcurve中。
標頭檔案:
#pragma once
#include #include #include #include #include class glcurve : public qopenglwidget, protected qopenglfunctions
;
cpp檔案:
#include "glcurve.h"
glcurve::glcurve(qwidget *parent)
: qopenglwidget(parent)
glcurve::~glcurve()
}void glcurve::initializegl()
\n";
vshader->compilesourcecode(vsrc);
qopenglshader *fshader = new qopenglshader(qopenglshader::fragment, this);
const char *fsrc =
"#version 330\n"
"out vec4 color;\n"
"void main()\n"
"\n";
fshader->compilesourcecode(fsrc);
m_pprogram = new qopenglshaderprogram;
m_pprogram->addshader(vshader);
m_pprogram->addshader(fshader);
m_pprogram->link();
m_pprogram->bind();
m_uivertloc = m_pprogram->attributelocation("pos");
m_pprogram->enableattributearray(m_uivertloc);
glenable(gl_depth_test);
glclearcolor(0.4,0.4,0.4,1);
}void glcurve::paintgl()
}void glcurve::resizegl(int w, int h)
void glcurve::vsetvertices(unsigned char * arrvertices, int icount)
}void glcurve::vsetxbounds(double dleftbound, double drightbound)
void glcurve::vsetybounds(double dlowerbound, double dupperbound)
呼叫時,要先設定橫向和縱向的表數範圍vsetx(y)bounds(),然後把原始資料通過vsetvertices()送入glcurve類:
#include "glcurve.h"
w.vsetxbounds(0, ilen - 1);
w.vsetybounds(0, ilen - 1);
w.vsetvertices(arr, ilen);
w.show();
return a.exec();
}
效果:
MATLAB曲線繪製
一。二維資料曲線圖 1.1 繪製 單根二維曲線 plot 函式的基本呼叫 格式為 plot x,y 其中x和y為長度相同的向量,分別用於儲存x座標 和y座標資料。例1 1 在0 x 2p區間內,繪製曲線 y 2e 0.5xcos 4 x 程式 如下 x 0 pi 100 2 pi y 2 exp 0...
NURBS曲線繪製
工作需要,最近做非均勻b樣條曲線資料庫建立。為養成良好的工作學習習慣,特此作總結,並希望以後在計算機 學上能有更深的造詣,以激勵自己不斷進步。續前,前段時間終於把nurbs調通,甚是高興!nurbs樣條曲線,這期間經過幾次曲折。第一次是參考網上的資料做出了均勻b樣條曲線,後來拿到客戶那裡去,發現大致...
繪製余弦曲線
繪製余弦曲線 在螢幕上用 顯示0 360度的余弦函式cos x 曲線 問題分析與演算法設計 如果在程式中使用陣列,這個問題十分簡單。但若規定不能使用陣列,問題就變得不容易了。關鍵在於余弦曲線在0 360度的區間內,一行中要顯示兩個點,而對一般的顯示器來說,只能按行輸出,即 輸出第一行資訊後,只能向下...