1

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) で終わらない矢印が表示されます。

この問題について誰が助けてくれますか?

ご挨拶、

トーマス

4

1 に答える 1

0

私の目的のために、解決策を見つけました。「ベクトル」を手で描きます。したがって、ベクトルの描画には次のコードのみを使用します。

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

幸運をお祈りしています、

トーマス

于 2016-08-24T20:04:18.690 に答える