Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Построение линий в пространстве
Отобразить линию, проходящую через точек с координатами можно с помощью функции 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 = [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 могут используються следующие свойства:
Рассмотрим некоторые свойства на примерах. Монотонное закрашивание куба. > > 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)
|