Qt 4.8.7 を搭載した Windows 10 でMathGL 2.3.5.1 ( http://mathgl.sourceforge.net/doc_en/Main.html ) を使用しています。
MathGL のベクトル場の使用に問題があります。https://sourceforge.net/projects/mathgl/files/mathgl/mathgl%202.3.5/ の下に mathgl-2.3.5.eng.pdf というファイル名の MathGL のドキュメントがあります 。メソッド「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 は矢印の始点を x 単位で表します
- y は、y 単位で矢印の始点を表します
- ax は、(数学的に) ベクトルの 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 を設定しました: xa[0] = 1.0; そしてya[0] = 1.0;。ベクトル V1 は次のように表す必要があります。 ax.a[0] = 1.0; および ay.a[0] = 1.0;。
結果のグラフには、P1(1,1) で始まるが P2(2,2) で終わらない矢印が表示されます。
この問題について誰が助けてくれますか?
ご挨拶、
トーマス