Создание массивов данных для трехмерной графики
Трехмерные поверхности обычно описываются функцией двух переменных z(x, у). Специфика построения трехмерных графиков требует не просто задания ряда значений х и у, то есть векторов х и у. Она требует определения для X и Y двумерных массивов – матриц. Для создания таких массивов служит функция meshgrid. В основном она используется совместно с функциями построения графиков трехмерных поверхностей. Функция meshgrid записывается в следующих формах:
- [X.Y] = meshgrid(x) – аналогична [X.Y] = meshgrid(x.x);
- [X.Y.Z] = meshgrid(x.y,z) – возвращает трехмерные массивы, используемые для вычисления функций трех переменных и построения трехмерных графиков;
- [X.Y] = meshgrid(x.y) – преобразует область, заданную векторами х и у, в массивы X и Y, которые могут быть использованы для вычисления функции двух переменных и построения трехмерных графиков. Строки выходного массива X являются копиями вектора х; а столбцы Y – копиями вектора у.
Пример:
>
>
[X.Y]
=
meshgnd(
1
:
4.13
:
17
)
X
=
1
2
3
4
1
2
3
4
1
2
3
4
1
2
3
4
1
2
3
4
Y
=
13
13
13
13
14
14
14
14
15
15
15
15
16
16
16
16
17
17
17
17
Приведем еще один пример применения функции meshgrid:
>
>
[X.Y]
=
meshgrid(
-
2
:.
2
:
2
.
-
2
:.
2
:
2
);
Такой вызов функции позволяет задать опорную плоскость для построения трехмерной поверхности при изменении от -2 до 2 с шагом 0.2. Дополнительные примеры применения функции meshgrid будут приведены далее при описании соответствующих команд. Рекомендуется ознакомиться с также командами surf и slice (ломтик).
Функция ndgrid является многомерным аналогом функции meshgrid:
- [Х1.Х2.ХЗ,…] = ndgrid(xl,x2,x3….) – преобразует область, заданную векторами x1.x2.x3…, в массивы Х1.Х2.Х3…, которые могут быть использованы для вычисления функций нескольких переменных и многомерной интерполяции, i-я размерность выходного массива xi является копией вектора xi;
- [XI.Х2….] = ndgrid(x) – аналогична [XI.Х2….] = ndgrid(x,x,…). Пример применения функции ndgrid представлен ниже:
>
>
[X1.X2]
=
ndgrid(
-
2
:.
2
:
2
.
-
2
:.
2
:
2
);
>
>
Z
=
X1
*
exp(
-
X1
*
2
-
X2
*
2
);
>
>
mesh(Z)
Рекомендуем читателю опробовать действие этого примера.