Я использую 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 = «»);
Если я правильно понимаю параметры, то
Итак, начнем с кодирования.
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).
Кто может помочь мне с этой проблемой?
Привет,
Томас
Для моей цели я нашел решение. Я рисую «векторы» вручную.
Поэтому я использую только этот код для рисования вектора:
mglGraph gr;
gr.Line(1,1, 2,2), "BA_"); // a vector from (1,1) to (2,2)
С наилучшими пожеланиями,
Томас
Других решений пока нет …