2016-08-15 60 views
1

我在Qt 4.8.7的Windows 10下使用MathGL 2.3.5.1(http://mathgl.sourceforge.net/doc_en/Main.html)。C++/MathGL:矢量字段的誤解

我有問題要使用MathGL的矢量場。有一個MathGL文件,其文件名爲mathgl-2.3.5.eng.pdf,文件名爲 https://sourceforge.net/projects/mathgl/files/mathgl/mathgl%202.3.5/ 「4.15矢量域」部分描述了方法「Vect」的用法。當然,在「2.8矢量場樣本」一節中有一個矢量場示例。

首先,我對矢量場的理解是有點(在我的情況下它總是在2D中)和(數學)矢量。因此,點P1(1,1)和矢量V1(1,1)的組合意味着箭頭從點P1(1,1)開始並在點P2(2,2)處結束,這是簡單向量相加:P2 = P1 + V1。

現在回到MathGL。我正在談論這種方法:無效的Vect(const mglDataA & x,const mglDataA & y,const mglDataA & ax,const mglDataA & ay,const char * sch =「」,const char * opt =「」);

如果我理解參數正確地然後

  • x表示沿x單位箭頭起始
  • y表示的箭頭的在y單位開始
  • 斧表示在x方向上的單位爲(數學) 矢量
  • AY表示用於(在數學上) 矢量
在y方向上的單位

那麼讓我們從編碼開始。

int sample(mglGraph *gr) 
{ 
    long cols=2; 
    long rows=2; 
    mglData x; x.Create(cols, rows); 
    x.a[0] = 1.0; x.a[1] = 0.0; x.a[2] = 0.0; x.a[3] = 0.0; 
    mglData y; y.Create(cols, rows); 
    y.a[0] = 1.0; y.a[1] = 0.0; y.a[2] = 0.0; y.a[3] = 0.0; 
    mglData ax; ax.Create(cols, rows); 
    ax.a[0] = 1.0; ax.a[1] = 0.0; ax.a[2] = 0.0; ax.a[3] = 0.0; 
    mglData ay; ay.Create(cols, rows); 
    ay.a[0] = 1.0; ay.a[1] = 0.0; ay.a[2] = 0.0; ay.a[3] = 0.0; 

    gr->Title("Vector field P1(1,1) V1(1,1)"); 
    gr->SetRanges(0, 3, 0, 3); 
    gr->Vect(x, y, ax, ay, "<"); 
    gr->Box(); 
    gr->Axis(); 
    gr->Grid("xy", "h:"); 
    return 0; 
} 

首先我無法通過這意味着我不能寫創建用於X,Y,Ax和Ay「列向量」的:

long cols=1; 
long rows=2; 
mglData x; x.Create(cols, rows); x.a[0] = 1.0; x.a[1] = 0.0; 
mglData y; y.Create(cols, rows); y.a[0] = 1.0; y.a[1] = 0.0; 
mglData ax; ax.Create(cols, rows); ax.a[0] = 1.0; ax.a[1] = 0.0; 
mglData ay; ay.Create(cols, rows); ay.a[0] = 1.0; ay.a[1] = 0.0; 

然後GR->的Vect(X, y,ax,ay,「<」);把這個消息放在控制檯上:

MathGL message - Vect: data dimension(s) is too small 

在這段代碼中我們設置了點P1:x.a [0] = 1.0;和y.a [0] = 1.0 ;.向量V1應該表示爲:ax.a [0] = 1.0;和ay.a [0] = 1.0 ;.

生成的圖顯示一個箭頭女巫開始在P1(1,1)但不結束在P2(2,2)。

誰能幫我解決這個問題?

問候,

托馬斯

+0

是否 長的cols = 2; 長行= 1; 工作? –

+0

cols = 2;行= 1;不起作用:-( –

回答

0

對於我的目的,我找到了解決辦法。我手工繪製「矢量」。 所以我只用這個代碼繪製矢量:

mglGraph gr; 
gr.Line(1,1, 2,2), "BA_"); // a vector from (1,1) to (2,2) 

最良好的祝願,

托馬斯