Построение линий в пространстве
Отобразить линию, проходящую через точек с координатами можно с помощью функции plot3(x,y,z), где x,y и z являются векторами одинаковой длины. Например, построим винтовую линию
.
>> t = [0:pi/18:6*pi];
>> x = cos(t);
>> y = sin(t);
>> z = t;
>> plot3(x, y, z,'r--')
>> grid
Дополнительный строковый аргумент задает цвет и стиль линии.
Функция plot3(X,Y,Z), где X, Y и Z матрицы одинакового размера , отображает линии, проходящие через точек с координатами , а число линий равно .
Например, построим тетраэдр, вершины которого заданы координатами:
.
>> X = [0 1 0 0 0 1; 1 0 0 0 0 0];
>> Y = [0 0 1 0 1 0; 0 1 0 0 0 0];
>> Z = [0 0 0 0 0 0; 0 0 0 1 1 1];
>> plot3(X, Y, Z,'r')
>> grid
4. Построение многогранников.
В MatLabимеется два основных способа построения фигур с помощью функции patch.
Первый способ.
Задают координаты вершин каждой грани многогранника, соединяя которые MatLabстроит фигуру. Формат вызова функции выглядит следующим образом patch(X, Y, C)или patch(X, Y, Z, C), где X, Y, Z – векторы значений координат вершин, а С задает цвет в формате ColorSpec. Аргументы X, Y, Z могут быть матрицами, тогда для каждого столбца строиться свой многогранник.
Пример 1.
Построение желтого треугольника:
>> X = [0 1 0];
>> Y = [0 0 1];
>> patch(X, Y, 'y')
Пример 2.
Построение правильного многоугольника:
>> t = 0:pi/4:2*pi;
>> X = sin(t);
>> Y = cos(t);
>> patch(X, Y, [1 0 0])
>> axis equal
В результате мы получаем восемь пар координат точек, равномерно расположенных на окружности единичного радиуса. Функция patchсоединяет их и закрашивает красным цветом.
Строка axis equal делает одинаковый масштаб по обеим осям.
Задавая достаточно большое количество точек, можно получать плавные кривые. Например, построим круг с плавной заливкой
>> t = 0:0.01:2*pi;
>> X = sin(t);
>> Y = cos(t);
>> patch(X, Y, 1:length(t))
>> axis equal
Функция patchможет использоваться и для закрашивания областей. Например,
X = 0:0.01:1;
X1 = 1:-0.01:0;
Y1 = X1.^2;
Y2 = sqrt(X);
patch([X X1], [Y2 Y1], 'y')
axis square
grid
Для построения таким же способом многогранника, X, Y, Z придется задавать в виде матриц, в которых для каждого столбца будет построен свой многоугольник. Например, нарисуем куб. Т.к. куб имеет 6 граней, то матрицы будут содержать 6 столбцов. Каждая грань состоит из четырех вершин, поэтому в каждой матрице будет 4 строки.
X – координаты | Y – координаты | Z – координаты |
Выполняем команды
>> X = [0 1 0 0 0 0; 1 1 1 0 1 1; 1 1 1 0 1 1; 0 1 0 0 0 0];
>> Y = [0 0 0 0 0 1; 0 1 0 0 0 1; 0 1 1 1 1 1; 0 0 1 1 1 1];
>> Z = [0 0 1 0 0 0; 0 0 1 1 0 0; 1 1 1 1 0 1; 1 1 1 0 0 1];
>> patch(X, Y, Z, [0.5 0.5 0.5])
>> axis equal
>> view(3)
Последняя команда view(3) устанавливает проекцию, используемую по умолчанию для визуализации трехмерных объектов. Если этой команды не будет, то мы увидим только одну грань куба.
Второй способ.
Задают все вершины многогранника и указывают, какие из них следует объединить в грани с заданными номерами.
Например, построим куб из предыдущего примера. Матрица вершин V имеет три столбца и восемь строк:
>> V = [0 0 0; 1 0 0; 1 0 1; 0 0 1; 0 1 0; 1 1 0; 1 1 1; 0 1 1];
Теперь надо построить матрицу F, в каждой строке которой будут перечислены вершины, образующие соответствующую грань. Вершины задаются как номер строки матрицы V, содержащей координаты этой вершины. Т.к. граней всего 6, то у матрицы F будет шесть строк
>> F = [1 2 3 4; 1 2 6 5; 2 3 7 6; 1 4 8 5; 3 4 8 7; 5 6 7 8];
>> patch('Vertices',V, 'Faces',F,'FaceColor', [0.5 0.5 0.5])
>> view(3)
>> axis equal
Способы закраски объектов.
Для объектов типа patch могут используються следующие свойства:
Свойства | Значение |
CData | Определяет свой цвет для каждой грани или вершины на основании данных о координатах вершин |
CDataMapping | Определяет, каким образом масштабируются цветовые данные |
FaceVertexCData | Определяет свой цвет для каждой грани или вершины на основании данных о вершинах и гранях |
EdgeColor | Задает общий цвет для всех ребер или способ их отображения: видимые, невидимые, с плавными переходами цвета. |
FaceColor | Задает общий цвет для всех граней или способ их отображения: видимые, невидимые, с плавными переходами цвета. |
MarkerEdgeColor | Определяет цвет маркеров или цвет контура у закрашенных маркеров. |
MarkerFaceColor | Определяет цвет закраски маркеров. |
Рассмотрим некоторые свойства на примерах.
Монотонное закрашивание куба.
>> X = [0 1 0 0 0 0; 1 1 1 0 1 1; 1 1 1 0 1 1; 0 1 0 0 0 0];
>> Y = [0 0 0 0 0 1; 0 1 0 0 0 1; 0 1 1 1 1 1; 0 0 1 1 1 1];
>> Z = [0 0 1 0 0 0; 0 0 1 1 0 0; 1 1 1 1 0 1; 1 1 1 0 0 1];
>> C = [1 2 3 4 5 6];
>> h = patch(X, Y, Z, 'y');
>> set(h,'CData',C,'FaceColor','flat')
>> colorbar
>> axis equal
>> view(3)