C ++ / MathGL: неправильное понимание векторных полей

Я использую MathGL 2.3.5.1 (http://mathgl.sourceforge.net/doc_en/Main.html) под Windows 10 с Qt 4.8.7.

У меня проблемы с использованием векторного поля 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. Я говорю об этом методе:
void Vect (const mglDataA &x, const mglDataA &y, const mglDataA &ax, const mglDataA &ау, const char * sch = «», const char * opt = «»);

Если я правильно понимаю параметры, то

  • х обозначает начало стрелки в единицах х
  • у представляет начало стрелки в у единицах
  • 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: 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).

Кто может помочь мне с этой проблемой?

Привет,

Томас

1

Решение

Для моей цели я нашел решение. Я рисую «векторы» вручную.
Поэтому я использую только этот код для рисования вектора:

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

С наилучшими пожеланиями,

Томас

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]