
МатЛаб алгебра и геометрия / Теория / Лабораторные работы / Лабораторная работа №8 - Поверхности 2 порядка
.docМодуль 3. Лабораторный практикум 8. Анимация в среде MATLAB. Построение поверхностей второго порядка
Лабораторный практикум 8. Анимация в среде MATLAB. Построение поверхностей второго порядка
В системе MATLAB нет процедур, позволяющих непосредственно создавать анимированные изображения, но есть средства, позволяющие проигрывать мультфильмы, кадрами которых являются заранее построенные графики.
Для выполнения данного практикума необходимо ознакомиться с функцией rotate (см. help rotate).
Упражнение 8.1.
С помощью функции rotate
изобразить на одном графике прямую
и ее образы после поворотов относительно
начала координат на углы 450
и –900
с шагом 50.
Анимация на плоскости
Построение анимации в MATLAB осуществляется в два приема. Сначала организуется цикл вида:
for k = 1:n
Блок команд, обеспечивающих построение какого-либо графика
M(k) = getframe;
end
где n – число кадров будущего мультфильма, а M – массив, в который функцией getframe последовательно складываются кадры.
Затем собранный мультфильм проигрывается функцией movie, при вызове которой первым аргументом указывается массив кадров, вторым – количество повторных циклов анимации и третьим – скорость воспроизведения (число кадров в секунду).
Пример 1. Строим анимированный график поворота прямой на 900 на плоскости. Проигрываем построенную анимацию два раза со скоростью 30 кадров/сек.
%Анимация вращения прямой y=2x в плоскости Oxy на 90 градусов
t=-1:.1:1;
hold on,grid on,axis equal
h=plot(t, 2*t);
title('Анимация вращения прямой')
for i=1:1:90
h=plot(t, 2*t);
rotate(h,[0 0 1],i),pause(.1) %вокруг оси Oz
M(i)=getframe;
end
movie(M,2,30)
Построение поверхностей второго порядка
Пример 2. Рассмотрим поверхность вращения – конус. Его можно полностью составить из прямых линий. Исходя из этого, образуем поверхность конуса вращением прямой – образующей конуса, которая вращается вокруг пересекающейся с ней другой прямой – осью конуса. Вращение будем осуществлять с помощью функции rotate(L, [0 0 1], i): образующая L поворачивается вокруг оси Oz ([0 0 1]), на угол i градусов. Команда pause (секунды) позволяет работать программе с задержкой, что и создает впечатление анимации.
%Построение конуса с помощью вращения прямой y=2x вокруг оси Oy
%Прямая задана в параметрическом виде x=t;y=2t
grid on, hold on, axis equal,view(15,51)
%Строим ось вращения - ось Oy
quiver3(0,-10,0,0,10,0,2,'Linewidth',2,'Color','r')
%Строим прямую L
t=-5:.1:5;
h=[t;2*t];
L=plot(h(1,:),h(2,:),'Linewidth',2);
xlabel('x'),ylabel('y'),zlabel('z')
for i=1:6:360
L=plot(h(1,:),h(2,:),'m');
rotate(L,[0 1 0],i),pause(0.05)
end
Заметим, что уравнение данного конуса:
.
Вспомните, как выглядят уравнения эллипса и гиперболы в параметрическом виде!
Упражнение
8.2. Построить эллипсоид
вращением эллипса
вокруг оси Ох.
Напишите уравнение данной поверхности.
Пример 3. Построим некоторые другие
поверхности второго порядка. Рассмотрим
эллиптический параболоид. Его каноническое
уравнение имеет вид
.
Так как переменная z явно выражена
через x и y, то будем строить эту
поверхность с помощью коанды meshgrid:
a=16;b=16;
[X,Y]=meshgrid(-a:0.1:a,-b:0.1:b);
Z=(X.^2/a^2 +Y.^2/b^2 );
mesh(X,Y,Z);
xlabel('x'), ylabel('y'),zlabel('z')
Упражнение 8.3. Построить гиперболический параболоид. Изобразить его сечение плоскостью x = Const. Параметры задайте самостоятельно.
Пример 4. Рассмотрим однополостный
гиперболоид. Его каноническое уравнение
имеет вид
.
В параметрическом виде (проверьте):
Параметр φ
– угол на плоскости
.
Параметр θ
регулирует высоту фигуры вдоль оси Oz.
Построим эту поверхность:
a=1;b=1;c=2;
u=(-2:0.02:2)';
phi=0:pi/100:2*pi;
X=a*cosh(u)*cos(phi);
Y=b*cosh(u)*sin(phi);
Z=c*sinh(u)*ones(size(phi));
mesh(X,Y,Z);
xlabel('x'),ylabel('y'),zlabel('z')
Упражнение 8.4. Постройте сферу, используя ее параметрическое уравнение:
Данные координаты называются сферическими координатами.
В MATLAB существуют встроенные функции, позволяющие строить некоторые поверхности второго порядка: sphere, ellipsoid, cylinder. Изучите эти функции самостоятельно. Заметим, что с помощью функции cylinder можно строить цилиндрообразующие поверхности: конус, пирамида. Для этого надо задать образующую и число образующих граней, например, cylinder([5 0],160).
Упражнение 8.5. Используя встроенные функции, постройте следующие поверхности с произвольными параметрами (радиус, высота, полуоси, количество граней):
Сферу; 2. Эллипсоид; 3. Цилиндр; 4. Конус; 5. Пирамиду.
Общий метод построения поверхностей
К сожалению, функции surf и mesh, рассмотренные ранее, плохо подходят для построения большинства поверхностей второго порядка, т.к. переменная z не выражена в их уравнениях в явном виде. Ниже мы рассмотрим пример построения поверхности второго порядка с помощью иных встроенных средств MATLAB.
Пример 5. Построение однополостного гиперболоида.
[X,Y,Z] = meshgrid(-10:0.5:10,-10:0.5:10,-10:0.5:10);
a=1;b=1;c=1;
V = X.^2/a^2 + Y.^2/b^2 - Z.^2/c^2;
p=patch(isosurface(X,Y,Z,V,1));
set(p,'FaceColor','red','EdgeColor','none');
view(3);
axis equal
grid on
camlight
Рассмотрим код данного примера более подробно.
В первой строке программы используется уже знакомая нам команда meshgrid, рассмотренная ранее. Однако, с ее помощью создается не двумерная сетка X и Y как делалось ранее, а трехмерная X, Y, Z. Полученные массивы содержат все вершины кубиков, полученных разбиением координатных осей на отрезки.
В строке 2 мы задаем коэффициенты поверхности. В зависимости от их значения фигура будет иметь различное растяжение вдоль осей. Строка 3 задает массив значений левой части уравнения поверхности во всех точках сетки X, Y, Z.
Непосредственное отображение поверхности происходит в 4-й строке программы. Функция isosurface представляет из себя логическую функцию, которая выделяет из массивов X, Y, Z точки для которых значения четвертого и пятого параметров совпадает (т.е. в нашем случае V==1). Функция patch выводит поверхность, заданную выбранными точками непосредственно на экран.
По умолчанию, функция patch использует для отображения сплошную заливку фигуру черным цветом, что зачастую неудобно. Функция set, использованная в 5-й строке, помогает задать нужный цвет фигуре. Цвет, указанный после 'FaceColor', определяет непосредственно цвет заливки поверхности фигуры. Параметр 'EdgeColor' отвечает за цвет, которым будет отображаться сетка на поверхности фигуры (построенная аналогично сетке, получаемой при вызове функции mesh). В примере этому параметру присвоено значение 'none', которое обозначает запрет отображения такой сетки.
Функция view (строка 6) отвечает за выбор направления взгляда. Команда view(2) отображает вид фигуры сверху, т.е. в плоскости Oxy; view(3) задает вид под углом (изометрическая проекция). Вызов функции view с другими параметрами позволяет осуществить вращение фигуры (вращения взгляда).
Наконец, последняя строка программы позволяет создать эффект освещения. Без ее использования фигура была бы залита однотонным красным цветом, в результате ее грани при отображении могли сливаться.
Упражнение 8.6. Изобразить 1) параболический цилиндр и 2) двуполостный гиперболоид. Параметры фигур и размер области отображения выберите самостоятельно.