Красавин Компютерныы практикум в среде МатЛаб 2015
.pdfzlabel('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