5.4 Матрица преобразования

Эти функции контролируют где и как график будет расположен. Существует определенный порядок вызова этих функций для лучшего вида графика. Вначале должны вызываться функции subplot, multiplot или inplot для указания местоположения вывода. После них – функции вращения rotate, shear и aspect. И наконец любые другие функции для рисования графика. Вместо вращения графика можно вызвать функцию columnplot, gridplot, stickplot, shearplot или относительную inplot для расположения графиков в столбец одного над другим без зазора между осями. См. раздел Subplots, для примеров кода и графика.

Команда MGL: subplot nx ny m ['stl'='<>_^' dx=0 dy=0]
Метод класса mglGraph: void SubPlot (int nx, int ny, int m, const char *stl="<>_^", mreal dx=0, mreal dy=0)
Функция С: void mgl_subplot (HMGL gr, int nx, int ny, int m, const char *stl)
Функция С: void mgl_subplot_d (HMGL gr, int nx, int ny, int m, const char *stl, mreal dx, mreal dy)

Помещает последующий вывод в m-ую ячейку сетки размером nx*ny от всего рисунка. Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться первой для создания "подграфика". С эстетической точки зрения не рекомендуется вызывать эту функцию с различными (или не кратными) размерами сетки. Дополнительное место для осей/colorbar резервируется только если строка stl содержит:

  • L’ или ‘<’ – с левого края,
  • R’ или ‘>’ – с правого края,
  • A’ или ‘^’ – с верхнего края,
  • U’ или ‘_’ – с нижнего края,
  • #’ – место резервироваться не будет – оси координат будут занимать все доступное пространство.

Ячейка может быть дополнительно сдвинута относительно своего обычного положения на относительный размер dx, dy. Отмечу, что colorbar может находиться за пределами рисунка если выбран пустой стиль ‘’.

Команда MGL: multiplot nx ny m dx dy ['style'='<>_^' sx sy]
Метод класса mglGraph: void MultiPlot (int nx, int ny, int m, int dx, int dy, const char *stl="<>_^")
Функция С: void mgl_multiplot (HMGL gr, int nx, int ny, int m, int dx, int dy, const char *stl)

Помещает последующий вывод в прямоугольник из dx*dy ячеек, начиная с m-ой ячейки, сетки размером nx*ny от всего рисунка. Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться первой для создания "подграфика". Дополнительное место для осей/colorbar резервируется если строка stl содержит:

  • L’ или ‘<’ – с левого края,
  • R’ или ‘>’ – с правого края,
  • A’ или ‘^’ – с верхнего края,
  • U’ или ‘_’ – с нижнего края,
  • #’ – место резервироваться не будет – оси координат будут занимать все доступное пространство.

Область вывода может быть дополнительно сдвинута относительно своего обычного положения на относительный размер sx, sy.

Команда MGL: inplot x1 x2 y1 y2 [rel=on]
Метод класса mglGraph: void InPlot (mreal x1, mreal x2, mreal y1, mreal y2, bool rel=true)
Функция С: void mgl_inplot (HMGL gr, mreal x1, mreal x2, mreal y1, mreal y2)
Функция С: void mgl_relplot (HMGL gr, mreal x1, mreal x2, mreal y1, mreal y2)

Помещает последующий вывод в прямоугольную область [x1, x2]*[y1, y2] (исходный размер [0,1]*[0,1]). Эта функция позволяет поместить график в произвольную область рисунка. Если параметр rel=true, то используется позиция относительно текущего subplot (или inplot с rel=false). Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться первой для создания "подграфика".

Команда MGL: columnplot num ind [d=0]
Метод класса mglGraph: void ColumnPlot (int num, int ind, mreal d=0)
Функция С: void mgl_columnplot (HMGL gr, int num, int ind)
Функция С: void mgl_columnplot_d (HMGL gr, int num, int ind, mreal d)

Помещает последующий вывод в ind-ую строку столбца из num строк. Положение столбца выбирается относительно последнего вызова subplot (или inplot с rel=false). Параметр d задает дополнительный зазор между строк.

Команда MGL: gridplot nx ny ind [d=0]
Метод класса mglGraph: void GridPlot (int nx, int ny, int ind, mreal d=0)
Функция С: void mgl_gridplot (HMGL gr, int nx, int ny, int ind)
Функция С: void mgl_gridplot_d (HMGL gr, int nx, int ny, int ind, mreal d)

Помещает последующий вывод в ind-ую ячейку таблицы nx*ny. Положение ячейки выбирается относительно последнего вызова subplot (или inplot с rel=false). Параметр d задает дополнительный зазор между ячеек.

Команда MGL: stickplot num ind tet phi
Метод класса mglGraph: void StickPlot (int num, int ind, mreal tet, mreal phi)
Функция С: void mgl_stickplot (HMGL gr, int num, int ind, mreal tet, mreal phi)

Помещает последующий вывод в ind-ую ячейку "бруска" из num ячеек. При этом сам брусок повернут на углы tet, phi. Положение выбирается относительно последнего вызова subplot (или inplot с rel=false).

Команда MGL: shearplot num ind sx sy [xd yd]
Метод класса mglGraph: void ShearPlot (int num, int ind, mreal sx, mreal sy, mreal xd=1, mreal yd=0)
Функция С: void mgl_shearplot (HMGL gr, int num, int ind, mreal sx, mreal sy, mreal xd, mreal yd)

Помещает последующий вывод в ind-ую ячейку "бруска" из num ячеек. При этом сама ячейка скошена на sx, sy. Направление бруска задается переменными xd и yd. Положение выбирается относительно последнего вызова subplot (или inplot с rel=false).

Команда MGL: title 'title' ['stl'='' size=-2]
Метод класса mglGraph: void Title (const char *txt, const char *stl="", mreal size=-2)
Метод класса mglGraph: void Title (const wchar_t *txt, const char *stl="", mreal size=-2)
Функция С: void mgl_title (HMGL gr, const char *txt, const char *stl, mreal size)
Функция С: void mgl_titlew (HMGL gr, const wchar_t *txt, const char *stl, mreal size)

Выводит заголовок title для текущего "подграфика" шрифтом stl с размером size. Если строка stl содержит ‘#’, то рисуется обрамляющий прямоугольник. Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться сразу после создания "подграфика". Следует отметить, что каждый последующий вызов команды резервирует дополнительное место. Поэтому следует вручную вызвать subplot после rasterize если требуется совместить растровые и векторные куски графика.

Команда MGL: rotate tetx tetz [tety=0]
Метод класса mglGraph: void Rotate (mreal TetX, mreal TetZ, mreal TetY=0)
Функция С: void mgl_rotate (HMGL gr, mreal TetX, mreal TetZ, mreal TetY)

Вращает систему координат относительно осей {x, z, y} последовательно на углы TetX, TetZ, TetY.

Команда MGL: rotate tet x y z
Метод класса mglGraph: void RotateN (mreal Tet, mreal x, mreal y, mreal z)
Функция С: void mgl_rotate_vector (HMGL gr, mreal Tet, mreal x, mreal y, mreal z)

Вращает систему координат относительно вектора {x, y, z} на угол Tet.

Команда MGL: shear sx sy
Метод класса mglGraph: void Shear (mreal sx, mreal sy)
Функция С: void mgl_shear (HMGL gr, mreal sx, mreal sy)

Сдвигает (скашивает) систему координат на значения sx, sy.

Команда MGL: aspect ax ay [az=1]
Метод класса mglGraph: void Aspect (mreal Ax, mreal Ay, mreal Az=1)
Функция С: void mgl_aspect (HMGL gr, mreal Ax, mreal Ay, mreal Az)

Устанавливает соотношение размеров осей в отношении Ax:Ay:Az. Для лучшего вида следует вызывать после функции rotate. Если Ax=NAN, то функция выберет оптимальное соотношение размеров, чтобы шаг по осям x-y был одинаков. При этом, Ay задает фактор пропорциональности шага (обычно 1), или указывает на его автоматический выбор при Ay=NAN.

Метод класса mglGraph: void Push ()
Функция С: void mgl_mat_push (HMGL gr)

Помещает матрицу преобразования в стек. Позднее вы можете восстановить текущее состояние с помощью функции Pop().

Метод класса mglGraph: void Pop ()
Функция С: void mgl_mat_pop (HMGL gr)

Заменяет (восстанавливает) матрицу преобразования на последнюю помещенную в стек матрицу.

Метод класса mglGraph: void SetPlotFactor (mreal val)
Функция С: void mgl_set_plotfactor (HMGL gr, mreal val)

Задает масштаб картинки. Не рекомендуется устанавливать значения меньше 1.5. Это аналог функции Zoom(), но применяется только к конкретному подграфику. Используйте ноль для включения автоматического масштабирования.

Также есть 3 функции, которые управляют перспективой Perspective(), масштабированием Zoom() и вращением View() всего рисунка. Т.е. они действуют как ещё одна матрица трансформации. Они были введены для вращения/приближения графика с помощью мыши. Не рекомендуется вызывать их при рисовании графика.

Команда MGL: perspective val
Метод класса mglGraph: void Perspective (mreal a)
Функция С: void mgl_perspective (HMGL gr, mreal a)

Добавляет (включает) перспективу для графика. Параметр a = Depth/(Depth+dz) \in [0,1). По умолчанию (a=0) перспектива отключена.

Команда MGL: view tetx tetz [tety=0]
Метод класса mglGraph: void View (mreal TetX, mreal TetZ, mreal TetY=0)
Функция С: void mgl_view (HMGL gr, mreal TetX, mreal TetZ, mreal TetY)

Вращает систему координат относительно осей {x, z, y} последовательно на углы TetX, TetZ, TetY. Вращение происходит независимо от rotate. Внимание! эти настройки не могут быть переписаны функцией DefaultPlotParam(). Используйте Zoom(0,0,1,1) для возвращения к виду по умолчанию.

Команда MGL: zoom x1 y1 x2 y2
Метод класса mglGraph: void Zoom (mreal x1, mreal y1, mreal x2, mreal y2)
Функция С: void mgl_set_zoom (HMGL gr, mreal x1, mreal y1, mreal x2, mreal y2)

Масштабирует весь рисунок. После вызова функции текущий график будет очищен и в дальнейшем рисунок будет содержать только область [x1,x2]*[y1,y2] от исходного рисунка. Координаты x1, x2, y1, y2 меняются в диапазоне от 0 до 1. Внимание! эти настройки не могут быть переписаны никакими другими функциями, включая DefaultPlotParam(). Используйте Zoom(0,0,1,1) для возвращения к виду по умолчанию.