2016-08-15 5 views
1

Qt 4.8.7のWindows 10でMathGL 2.3.5.1(http://mathgl.sourceforge.net/doc_en/Main.html)を使用しています。C++/MathGL:ベクトルフィールドの誤解

MathGLのベクトルフィールドを使用する際に問題があります。https://sourceforge.net/projects/mathgl/files/mathgl/mathgl%202.3.5/ の下にファイル名mathgl-2.3.5.eng.pdfを持つMathGLのドキュメントがあります。「4.15ベクトルフィールド」セクションでは、メソッド "Vect"の使い方を説明しています。もちろん、「2.8ベクトルフィールドサンプル」の節にはベクトルフィールドの例があります。

まず、ベクトルフィールドの私の理解は、ポイント(私の場合は常に2Dである)と(数学的に)ベクトルがあるということです。したがって、点P1(1,1)とベクトルV1(1,1)の組み合わせは、点P1(1,1)で始まり、単純ベクトル加算である点P2(2,2)で終わることを意味する:P2 = P1 + V1。

今すぐMathGLに戻ってください。私はこの方法について話しています: void Vect(const mglDataA & x、const mglDataA & y、const mglDataA & ax、const mglDataA & ay、const char * sch = ""、const char * opt = "");私が正しく次にパラメータを理解していれば

  • xは
  • yは
  • Axがx方向の単位を表し、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、斧とyのための「列ベクトル」を作成することはできませんまず第一に:

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) 

ベスト願いを