Построение линий в пространстве

Отобразить линию, проходящую через точек с координатами можно с помощью функции 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)