Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Красавин Компютерныы практикум в среде МатЛаб 2015

.pdf
Скачиваний:
121
Добавлен:
12.11.2022
Размер:
9.22 Mб
Скачать

zlabel('z', 'FontName', 'Trebuchet MS', 'FontAngle', 'italic', 'FontSize', 10, 'FontWeight', 'bold')

Рис. 6.1. Трехмерные гистограммы

6.2. Линейные графики в 3D

Функция plot3 (пример 6.2) является трехмерным аналогом

функции plot. Функция plot(x,y,z), где

,

в,

– векторы

одинаковой длины, строит линию, проходящую

пространстве

через точки с координатами

то,

. Если

 

 

являются

матрицами одинакового размера, ,

функция

 

,plot(x,y,z),

строит семейство линий, каждая из которых отвечает соответствующим столбцам матриц , , .

Пример 6.2. Рассмотрим график линии в 3D (рис. 6.2).

t = linspace(0, 10*pi, 500); % вектор из 500 точек, равномерно распределенных на отрезке от 0 до 10π

figure

plot3(sin(t),cos(t),t,'r','LineWidth',3) % график линии в 3D

set(gca, 'LineWidth',1)

set(gca, 'FontName', 'Trebuchet MS') set(gca, 'FontSize', 8)

set(gca, 'FontWeight', 'bold')

xlabel('sin(t)','FontName', 'Trebuchet MS', 'FontAngle', 'italic', 'FontSize', 10, 'FontWeight', 'bold')

ylabel('cos(t)','FontName', 'Trebuchet MS', 'FontAngle', 'italic', 'FontSize', 10, 'FontWeight', 'bold')

zlabel('t','FontName', 'Trebuchet MS', 'FontAngle', 'italic', 'FontSize', 10, 'FontWeight', 'bold')

grid on % включение сетки

61

Рис. 6.2. График линии в 3D

Функция view(a,b) позволяет задать угол точки обзора трехмерного графика (пример 6.3, рис. 6.3). Параметр a определяет

угол поворота (в градусах) в плоскости

,

параметр b – угол

подъема обзора относительно плоскости

.

По умолчанию эти

значения равны

37.5;

30.

 

 

Пример 6.3.

t = linspace(0,6*pi,500);

figure

subplot(2,2,1)

plot3(sin(t),cos(t),t,'r','LineWidth',3) % 3D-вид по умолчанию set(gca, 'LineWidth',1)

set(gca, 'FontName', 'Trebuchet MS') set(gca, 'FontSize', 8)

set(gca, 'FontWeight', 'bold')

xlabel('sin(t)','FontName', 'Trebuchet MS', 'FontAngle', 'italic', 'FontSize', 10, 'FontWeight', 'bold')

ylabel('cos(t)','FontName', 'Trebuchet MS', 'FontAngle', 'italic', 'FontSize', 10, 'FontWeight', 'bold')

zlabel('t','FontName', 'Trebuchet MS', 'FontAngle', 'italic', 'FontSize', 10, 'FontWeight', 'bold')

grid on title('3D')

62

subplot(2,2,2)

plot3(sin(t),cos(t),t,'g','LineWidth',3)

view(0,90)

set(gca, 'LineWidth',1)

set(gca, 'FontName', 'Trebuchet MS') set(gca, 'FontSize', 8)

set(gca, 'FontWeight', 'bold')

xlabel('sin(t)','FontName', 'Trebuchet MS', 'FontAngle', 'italic', 'FontSize', 10, 'FontWeight', 'bold')

ylabel('cos(t)','FontName', 'Trebuchet MS', 'FontAngle', 'italic', 'FontSize', 10, 'FontWeight', 'bold')

zlabel('t','FontName', 'Trebuchet MS', 'FontAngle', 'italic',

'FontSize', 10, 'FontWeight', 'bold')

 

grid on

по осям

title('Взгляд на плоскость xy') % обозначения

автоматически корректируются в зависимости от угла

обзора; в

данном случае обозначение по оси z не показывается

 

subplot(2,2,3)

plot3(sin(t),cos(t),t,'b','LineWidth',3)

view(0,0)

set(gca, 'LineWidth',1)

set(gca, 'FontName', 'Trebuchet MS') set(gca, 'FontSize', 8)

set(gca, 'FontWeight', 'bold')

xlabel('sin(t)','FontName', 'Trebuchet MS', 'FontAngle', 'italic', 'FontSize', 10, 'FontWeight', 'bold')

ylabel('cos(t)','FontName', 'Trebuchet MS', 'FontAngle', 'italic', 'FontSize', 10, 'FontWeight', 'bold')

zlabel('t','FontName', 'Trebuchet MS', 'FontAngle', 'italic', 'FontSize', 10, 'FontWeight', 'bold')

grid on

title('Взгляд на плоскость xz')

subplot(2,2,4)

plot3(sin(t),cos(t),t,'m','LineWidth',3)

view(90,0)

set(gca, 'LineWidth',1)

set(gca, 'FontName', 'Trebuchet MS') set(gca, 'FontSize', 8)

set(gca, 'FontWeight', 'bold')

xlabel('sin(t)','FontName', 'Trebuchet MS', 'FontAngle', 'italic', 'FontSize', 10, 'FontWeight', 'bold')

ylabel('cos(t)','FontName', 'Trebuchet MS', 'FontAngle', 'italic', 'FontSize', 10, 'FontWeight', 'bold')

zlabel('t','FontName', 'Trebuchet MS', 'FontAngle', 'italic', 'FontSize', 10, 'FontWeight', 'bold')

grid on

title('Взгляд на плоскость yz')

63

Рис. 6.3. Использование функции view

6.3. Поверхности

Основными функциями, используемыми для построения

трехмерных поверхностей

в MatLab, являются mesh,

surf и meshgrid (пример 6.4). Функция,

mesh используется для

построения каркасов поверхностей (рис. 6.4), а функция surf рисует цветную параметрическую поверхность; цвет определяется величиной для каждой расчетной точки (рис. 6.5).

Пример 6.4.

[x,y,z] = sphere(15); % встроенная функция MatLab sphere(n)

возвращает векторы x,y,z длины n+1, содержащие координаты единичной сферы

figure

mesh(x,y,z) % создание каркасной поверхности сферы set(gca, 'LineWidth',1)

set(gca, 'FontName', 'Trebuchet MS') set(gca, 'FontSize', 8)

64

set(gca, 'FontWeight', 'bold') title('Каркас сферы')

figure

surf(x,y,z) % создание поверхности сферы set(gca, 'LineWidth',1)

set(gca, 'FontName', 'Trebuchet MS') set(gca, 'FontSize', 8)

set(gca, 'FontWeight', 'bold') title('Поверхность сферы')

colorbar % добавление на рисунок легенды, содержащей информацию о зависимости цвета поверхности от величины z

Рис. 6.4. Каркас сферы, построенный при помощи функции mesh

Рис. 6.5. Поверхность сферы, построенная при помощи функции surf

65

При помощи функции meshgrid (пример 6.5, рис. 6.6) задается сетка точек в плоскости , на которых рассчитывается функция , ; затем матрицы , , используются при обращении к

mesh или surf.

Пример 6.5.

u=linspace(-5,5,81); % задание вектора длиной 81 с координатами, равномерно распределенными на отрезке от -5

до 5

же длины

с

v=linspace(0,10,81); % задание вектора той

координатами, равномерно распределенными

на

отрезке от 0 до 10

[x,y]=meshgrid(u,v); % в данном случае функция meshgrid задает квадратные матрицы x и y размером 81х81

z1=3*sin(x).*cos(y); % вычисление значений функции в точках (x,y)

figure

surf(x,y,z1) % 3D-поверхность z1 set(gca, 'LineWidth',1)

set(gca, 'FontName', 'Trebuchet MS') set(gca, 'FontSize', 8)

set(gca, 'FontWeight', 'bold') xlabel('x'),ylabel('y'),zlabel('z') title('3D-поверхность и плоскость') hold on

z2=0*x + 1; % задание плоскости, пересекающей ось z в точке 1; оператор 0*x создает матрицу из нулей по размеру матрицы x, затем ко всей матрице прибавляется 1; аналогично z2 можно было бы задать оператором z2 = ones(size(x))

mesh(x,y,z2) % плоскость z2 hold off

Функции meshc и surfc (пример 6.6) дополняют, соответственно, каркас поверхности и поверхность контурными графиками (рис. 6.7), показывающими уровни одинаковой высоты.

Пример 6.6.

[X,Y,Z] = peaks; % peaks – встроенная функция MatLab, задающая координаты точек поверхности с двумя максимумами

figure

surfc(X,Y,Z) % построение поверхности с контурным графиком axis([-3 3 -3 3 -10 5]) % определение диапазонов по осям set(gca, 'LineWidth',1)

set(gca, 'FontName', 'Trebuchet MS') set(gca, 'FontSize', 8)

set(gca, 'FontWeight', 'bold')

66

Рис. 6.6. Функция meshgrid. Используется для задания сетки в плоскости для вычисления значений функции ,

Рис. 6.7. Поверхность с контурным графиком

67

Закраска трехмерной поверхности может быть проведена различными способами (рис. 6.8). Пример 6.7 иллюстрирует различные варианты.

Пример 6.7.

figure subplot(1,3,1) sphere(16)

axis square % оси одного масштаба

shading flat % плоская закраска, сетка не отображается set(gca, 'LineWidth',1)

set(gca, 'FontName', 'Trebuchet MS') set(gca, 'FontSize', 8)

set(gca, 'FontWeight', 'bold') title('shading flat')

subplot(1,3,2)

sphere(16) axis square

shading faceted % закраска по умолчанию, сетка отображается set(gca, 'LineWidth',1)

set(gca, 'FontName', 'Trebuchet MS') set(gca, 'FontSize', 8)

set(gca, 'FontWeight', 'bold') title('shading faceted')

subplot(1,3,3)

sphere(16) axis square

shading interp % матрица цветов рассчитывается путем интерполяции, сетка не отображается, перемена цветов становится плавной

set(gca, 'LineWidth',1)

set(gca, 'FontName', 'Trebuchet MS') set(gca, 'FontSize', 8)

set(gca, 'FontWeight', 'bold') title('shading interp')

Рис. 6.8. Различные варианты закраски поверхности

68

6.4. Разные примеры

На примере 6.8 рассмотрим использование различных палитр

(рис. 6.9).

Пример 6.8.

[x,y] = meshgrid(-3:0.01:3); создание сетки точек в плоскости xy z = peaks(x,y);

figure

surfl(x,y,z); % функция surfl строит поверхность и добавляет к изображению источник света

shading interp % градиентная заливка colormap gray % палитра серых цветов

axis([-3 3 -3 3 -8 8]) % задание масштабов по осям set(gca, 'LineWidth',1)

set(gca, 'FontName', 'Trebuchet MS') set(gca, 'FontSize', 8)

set(gca, 'FontWeight', 'bold') figure

surfl(x,y,z);

view([25 25]) % изменение угла обзора поверхности shading interp

colormap copper % палитра медных цветов axis([-3 3 -3 3 -8 8])

set(gca, 'LineWidth',1)

set(gca, 'FontName', 'Trebuchet MS') set(gca, 'FontSize', 8)

set(gca, 'FontWeight', 'bold')

Рис. 6.9. Использование различных палитр

69

В примере 6.9 приведены различные способы построения контурных графиков (рис. 6.10).

Пример 6.9.

figure

colormap jet % одна из встроенных палитр

subplot(2,2,1) [x,y,z] = peaks;

contour(x,y,z,30) % контурный график функции peaks с 30 линиями уровня

set(gca, 'LineWidth',1)

set(gca, 'FontName', 'Trebuchet MS') set(gca, 'FontSize', 8)

set(gca, 'FontWeight', 'bold')

subplot(2,2,2)

[c,h] = contour(x,y,z,8); % контурный график с 8 линиями уровня; в матрицу c заносятся данные, определяющие контурные линии

set(gca, 'LineWidth',1)

set(gca, 'FontName', 'Trebuchet MS')

set(gca, 'FontSize',

8)

 

set(gca, 'FontWeight',

'bold')

MS','FontSize', 5,'FontWeight',

clabel(c,h,'FontName',

'Trebuchet

'bold')

% функция

clabel(c,h)

вставляет числа, определяющие

уровень

линии, вдоль

самих линий уровня

subplot(2,2,3)

pcolor(x,y,z) % «псевдоцвета»; цвет каждой точки определяется значениями ближайших к точке координат (x,y,z)

shading interp

set(gca, 'LineWidth',1)

set(gca, 'FontName', 'Trebuchet MS') set(gca, 'FontSize', 8)

set(gca, 'FontWeight', 'bold')

subplot(2,2,4)

contourf(x,y,z,15) % пространство между линиями уровня заполняется одним цветом

set(gca, 'LineWidth',1)

set(gca, 'FontName', 'Trebuchet MS') set(gca, 'FontSize', 8)

set(gca, 'FontWeight', 'bold')

70

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