Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MATLAB.doc
Скачиваний:
202
Добавлен:
13.11.2018
Размер:
1.36 Mб
Скачать

4.2. Построение трехмерных поверхностей и тел

4.2.1. Основные графические функции

Трехмерные графики отображают функцию двух переменных как z-координаты точек над плоскостью . Соединение этих точек достигается с помощью двух основных функций: plot3(x,y,z) – построение одной пространственной линии или линий в сечениях; mesh и ее разновидности – построение сетчатой поверхности; surf – построение сплошной поверхности.

Построим трехмерное тело, описываемое уравнением , где , . Создадим сетку координат в плоскости и формируем матрицу z и функцию r

» [x,y]=meshgrid([-10:0.4:10]); z=sqrt(x.^2+y.^2)+eps; r=sin(z)./z;

Смещение значений z на величину eps предусмотрено для того, чтобы исключить неопределенность при . Значение системной константы eps:

» eps

ans =

2.2204e-016

Создадим ряд пространственных объектов:

1. Линии сечений в пространстве:

» plot3(x,y,r), grid

2. Зависимость r от номеров элементов x и y:

» mesh(r)

3. Зависимость r от значений элементов x и y:

» mesh(x,y,r)

4. Зависимость с отображением линий уровня на плоскости :

» meshc(x,y,r)

5. Зависимость как «столбчатая» поверхность:

» meshz(x,y,r)

В предыдущих случаях поверхность тела была сетчатой. Для того чтобы она выглядела как сплошная, используют функцию surf (surface = поверхность) в тех же вариантах, что и mesh, например

» surfc(x,y,r)

4.2.2. Дополнительные возможности

Команда shading с соответствующими параметрами обеспечивает «затенение» поверхности: shading faceted («фасеточное») – равномерная раскраска ячеек с черными гранями (по умолчанию); shading flat («плоское») – раскраска ячеек и граней цветами, соответствующими цветам узлов; shading interp («интерполяционное») – цвета ячеек и граней определяются в результате двухмерной линейной интерполяции цветов в узлах.

Сравните команды:

» shading flat

» shading interp

Восстановим исходное состояние объекта:

» shading faceted

Изменим цветовую палитру:

» colormap copper

Восстановление палитры по умолчанию: colormap default или colormap hsv.

В некоторых случаях может возникнуть необходимость в изменении яркости цветовой палитры, для чего используют функцию brighten(beta) с соответствующим значением аргумента: при увеличении яркости , при уменьшении – соответст­венно .

» surf(x,y,r), brighten(0.5)

Возврат в исходное состояние осуществляется по команде: brighten(-beta):

» brighten(-0.5)

Угол наблюдения, под которым виден пространственный объект, устанавливается с помощью команды view(az,el) или view([az,el]) , где az – угол азимута (от англ. azimuth – поворот относительно оси z) и el – угол возвышения (от англ. elevation – поворот относительно оси х). Значения углов задают в градусах. По умолчанию , . Эти параметры устанавливаются командой view(3). Другой вариант ввода параметров – включение вектора углов поворота в графические функции: mesh(z,[az el]).

Пример. Вращение относительно оси х при фиксированном угле азимута:

» az=-37.5;

» for k=0:12, mesh(r,[az k*5]), grid, pause, end

Поворот осей внутри пространственного объекта на произвольные углы можно осуществлять с помощью мыши по команде rotate3d on – включение режима вращения: внутри фигуры появляется анимационный параллелепипед, изменяющий положение при движении мыши; в левом нижнем углу отображаются текущие значения углов азимута и возвышения. По команде rotate3d off отключается режим вращения.

Упражнение. Создать трехмерную фигуру и изменять ее положение с помощью команды rotate3d on. После выполнения упражнения отменить режим (rotate3d или rotate3d off).

Линии уровня, соответствующие сечению пространственного тела горизонтальными плоскостями на различной высоте, выводятся с помощью функции contour:

contour(z) – число линий уровня по умолчанию, без учета диапазона значений x и y;

contour(z,n) – то же, но с заданным числом линий уровня n;

contour(x,y,z), contour(x,y,z,n) – то же, с учетом диапазона значений x и y.

Пример:

» [x,y]=meshgrid(-2:0.1:2,-2:.1:3);

» z=x.*exp(-x.^2-y.^2); mesh(x,y,z), pause, contour(z,25)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]