Трехмерные поверхности обычно описываются функцией двух переменных z(x,y), причем аргументы x и y задаются, как правило в виде опорной сетчатой плоскости, т.е. двумерных массивов.
Для отображения зависимостей критериев качества системы от параметров при проведении
параметрических исследований можно использовать возможности 3D изображения, и в частности, трехмерную графику пакета MATLAB, причем в качестве аргументов x и y используются параметры системы, например, два из трех параметров ПИД- регулятора, в качестве функции z - исследуемый
критерий качества.
Далее приведено описание графических функций пакета.
В системе MATLAB предусмотрено несколько команд и функций для построения трехмерных графиков. Значения элементов числового массива рассматриваются как z-координаты точек над плоскостью, определяемой координатами х и у. Возможно несколько способов соединения этих точек. Первый из них - это соединение точек в сечении (функция plot3), второй -построение сетчатых поверхностей (функции mesh и surf). Поверхность, построенная с помощью функции mesh, - это сетчатая поверхность, ячейки которой имеют цвет фона, а их границы могут иметь цвет, который определяется свойством EdgeColor графического объекта surface. Поверхность, построенная с помощью функции surf, - это сетчатая поверхность, у которой может быть задан цвет не только границы, но и ячейки; последнее управляется свойством FaceColor графического объекта surface.
Команда plot3 :Построение линий и точек в трехмерном пространстве
Синтаксис:
plot3(x,у,z)
plot3(X,Y,Z)
plot3(x,у,z,s)
plot3(x1,y1.z1,s1,x2,y2,z2,s2,...)
Описание:
Команды plot3(...) являются трехмерными аналогами функции plot(...).
Команда plot3(x,у,z), где х, у, z - одномерные массивы одинакового размера, строит точки с координатами x(i), y(i), z(i) и соединяет их прямыми линиями.
Команда plot3(X,Y,Z), где X, Y, Z - двумерные массивы одинакового размера, строит точки с координатами x(i,:), y(i,:), z(i,:) для каждого столбца и соединяет их прямыми линиями.
Команда plot3(x,у,z,s) позволяет выделить график функции z(x, у), указав способ отображения линии, способ отображения точек, цвет линий и точек с помощью строковой переменной s, которая может включать до трех символов из следующей таблицы.
Таблица 1
Тип линии | Тип точки | Цвет |
Непрерывная - | Точка . | Желтый y |
Штриховая -- | Плюс + | Фиолетовый m |
Двойной пунктир : | Звездочка * | Голубой c |
Штрих –пунктирная -. | Кружок  | Красный r |
| Крестик × | Зеленый g |
| | Синий b |
| | Белый w |
| | Черный k |
Если цвет линии не указан, он выбирается по умолчанию из шести первых цветов, с желтого до синего, повторяясь циклически.
Команда plot3(x1, yl, z1, s1, x2, y2, z2, s2, ...) позволяет объединить на одном графике несколько функций z1(x1, y1), z2(x2, y2), ..., определив для каждой из них свой способ отображения.
Обращение к команде plot3 вида plot3(x, у, z, s1, х, у, z, s2) позволяет для графика z(x, у) определить дополнительные свойства, для указания которых применения одной строковой переменной s1 недостаточно, например, при задании разных цветов для линии и для точек на ней.
Сопутствующие функции и команды: plot, line, axis, view, mesh, surf.
Рис. 1. График функции z=xe(-x2-y2) , x,y-одномерные векторы, команда plot3(x, y, z)
Команда meshgrid: Формирование двумерных массивов X и Y
Синтаксис:
[X,Y] = meshgrid(x,у)
[X,Y] = meshgrid(x)
Описание:
Функция [X,Y] = meshgrid(x,у) задает сетку на плоскости х-у в виде двумерных массивов X, Y, которые определяются одномерными массивами х и у. Строки массива Х являются копиями вектора х, а столбцы - копиями вектора у. Формирование таких массивов упрощает вычисление функций двух переменных, позволяя применять операции над массивами.
Функция (X,Y] = meshgrid(x) представляет собой упрощенную форму записи для функции [X,Y] = meshgrid(x,х).
Сопутствующие функции и команды: mesh, surf.
На рис.2 представлено использование команды plot3 с предварительным формированием двумерной сетки по команде meshgrid(x)
Рис. 2. График функции z=xe(-x2-y2) , X,Y - двумерные сетки по x,y; команда plot3(X,Y,Z)
Команды MESH,MESHC,MESHZ:Трехмерная сетчатая поверхность
Синтаксис:
mesh(X,Y,Z,С) meshc(X,Y,Z,С) meshz(X,Y,Z,С)
mesh(x,у,Z,С ) meshc(x,у,Z,С ) meshz(x,у,Z,С )
mesh(Z,С) meshc(Z, С) meshz(Z, С)
mesh(X, Y, Z) meshc(X, Y, Z) meshz(X, Y, Z)
mesh(x, y, Z) meshc (х, y, Z) meshz(x, y, Z)
mesh(Z) meshc(Z) meshz(Z)
Описание:
Команда mesh(X, Y, Z, С) выводит на экран сетчатую поверхность для значений массива Z, определенных на множестве значений массивов Х и Y. Цвета узлов поверхности задаются массивом С. Цвета ребер определяются свойством EdgeColor объекта surface. Можно задать одинаковый цвет для всех ребер, определив его в виде вектора [r b g] интенсивности трех цветов -красного, зеленого, синего. Если определить спецификацию none, то ребра не будут прорисовываться. Если определить спецификацию flat, то цвет ребер ячейки определяется цветом того узла, который был первым при обходе этой ячейки. Поскольку одни и те же ребра обходятся несколько раз, то цвета будут замещаться. Если определить спецификацию interp, то будет реализована линейная интерполяция цвета между вершинами ребра.
Команда mesh(x, у, Z, С) выполняет ту же функцию, но вместо двумерных массивов X, Y использует их одномерные проекции, так что если length(x) = n, a length(y) = m, то [m, n] = size(Z). В этом случае узлы сетчатой поверхности определяются тройками {x(j), y(i), Z(i, j)}, где вектор х определяет столбцы массива Z, а у - строки.
Команда mesh(Z. С) использует сетку, которая определяется одномерными массивами х = 1 ; n и у = 1 : m.
Команды mesh(X, Y, Z), mesh(x, у, Z), mesh(Z) используют в качестве массива цвета С = Z, то есть цвет в этом случае пропорционален высоте поверхности.
Группа команд meshc(...) в дополнение к трехмерным поверхностям строит проекцию линий постоянного уровня.
Группа команд meshz(...) в дополнение к трехмерным поверхностям строит плоскость отсчета на нулевом уровне, закрывая поверхность, лежащую ниже этого уровня.
Функция h = mesh(...) возвращает дескриптор h для графического объекта surface.
Сопутствующие функции и команды. surf, waterfall
Рис. 3. Трехмерная поверхность функции z=xe(-x2-y2) с проекциями линии постоянного уровня.
Рис. 4. Трехмерная поверхность функции z=xe(-x2-y2) с пьедесталом отсчета meshz(X, Y, Z)
Команда SURF,SURFC:Затененная сетчатая поверхность
Синтаксис:
surf(X,Y,Z,С) surfc(X,Y,Z,C)
surf(x,y,Z,С ) surfc(x,y,Z,С)
surf(Z,C) surfc(Z,C)
surf(X,Y,Z) surfc(X,Y,Z)
surf(x,y,Z) surfc (x,y,Z)
surf(Z) surfc(Z)
Описание:
Команда surf(X, Y, Z, С) выводит на экран затененную сетчатую поверхность для значений массива Z, определенных на множестве значений массивов Х и Y. Цвет ячейки определяется массивом С. Цвет ребер - черный, определяется свойством EdgeColor, специфицированным как [0 0 0]. Можно задать одинаковый цвет для всех ребер, определив его в виде вектора [г g b] интенсивности трех цветов - красного, зеленого, синего. Если определить спецификацию none, то ребра не будут прорисовываться
Команда surf(x, y, Z, С) выполняет ту же функцию, но вместо двумерных массивов X, Y использует их одномерные проекции, так что если length(x) = = n, a length(y) = m, то [m, n] = size(Z). В этом случае узлы сетчатой поверхности определяются тройками {x(j), y(i), Z(i, j)}, где вектор x определяет столбцы массива Z, a y - строки.
Команда surf(Z, С) использует сетку, которая определяется одномерными массивами х = 1 : n и у = 1 : m.
Команды surf(X, Y. Z), surf(x, y. Z), surf(Z) используют в качестве массива цвета С = Z, то есть цвет в этом случай пропорционален высоте поверхности.
Группа команд surfc(...) в дополнение к трехмерным затененным поверхностям строит проекцию линий постоянного уровня.
Функция h = surf(...) возвращает дескриптор h для графического объекта surface.
На рис.5 представлен результат работы функций surf(X, Y, Z);colormap(jet); shading interp
Рис. 5. Трехмерная затененная поверхность функции z=xe(-x2-y2) со шкалой затененности
Команда SURF: Затененная поверхность с подсветкой
Синтаксис:
surfl(X,Y,Z,s)
surfl(Z,s)
surfl(X,Y,Z,s,k)
surfl(Z,s,k)
surfl(X,Y,Z)
surfl(Z)
Описание:
Команда surfl(X. Y, Z, s) выводит на экран затененную поверхность с подсветкой для значений массива Z, определенных на множестве значений массивов Х и Y. Направление на источник света может быть задано с помощью вектора s = [Sx, Sy, Sz] в декартовых координатах или вектора s = [az, elev] в сферических координатах. По умолчанию азимут az = -37.5°, возвышение elev = 30°. Подсветка учитывает модели рассеяния, отражения и зеркального эффекта освещения поверхности.
Команда surfl(X, Y, Z, s, k) позволяет управлять параметрами рассеяния, отражения и зеркального эффекта, используя вектор k = [ka, kd, ks, spread], который учитывает эффекты отраженного света ka, диффузного отражения kd, зеркального отражения ks и зеркального распространения spread. По умолчанию вектор k имеет значения [0.55 0.6 0.4 10].
Команда surfl(X, Y, Z) использует значения параметров по умолчанию.
Команды surfl(Z, ...) строят графики, не учитывая истинных значений массивов Х и Y.
Из-за того что алгоритм surfl вычисляет нормали к поверхности, необходимо, чтобы входные матрицы имели размер, по крайней мере 3х3.
На рис.6 представлено изображение функции z=xe(-x2-y2) с помощью surfl(X,Y,Z,s), s = [az, elev];az = -37.5 ° (азимут), elev =30° (возвышение)
Рис. 6. Изображение функции z=xe(-x2-y2)с помощью surfl(X,Y,Z,s)