2016-08-15 3 views
1

Я использую 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).

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

Привет,

Томас

+0

ли длинных смещ_по_столбцами = 2; длинные строки = 1; работа? –

+0

cols = 2; строки = 1; не работает тоже :-( –

ответ

0

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

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

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

Томасу

Смежные вопросы