Я использую MathGL 2.3.5.1 (http://mathgl.sourceforge.net/doc_en/Main.html) под Windows 10 с Qt 4.8.7.C++/MathGL: Недостаток векторных полей
У меня есть проблемы с использованием векторного поля 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. Я говорю об этом методе: недействительного Vect (Const mglDataA & х, Const mglDataA & у, Const mglDataA & топора, сопзИте mglDataA & ау, Const символ * сч = "", Const символ * 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;
}
Прежде всего, я не могу создать «векторы-столбцы» для х, у, ах и ау по смыслу я не могу написать:
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 (х, 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).
Кто может помочь мне с этой проблемой?
Привет,
Томас
ли длинных смещ_по_столбцами = 2; длинные строки = 1; работа? –
cols = 2; строки = 1; не работает тоже :-( –