Для более сложных случаев анимации возможно применение техники мультипликации. Она сводится к построению ряда кадров изображения, причем каждый кадр появляется на некоторое время, затем стирается и заменяется на новый кадр, несколько отличающийся от предшествующего. Если это отличие незначительно, то создается иллюзия плавного перемещения объекта.
Отметим кратко основные команды, реализующие анимацию в системе MATLAB:
· capture — захват видеоизображения;
· getframe — создание кадра для анимации;
· moviein — выполнение анимации;
· rotate — вращение фигуры;
· frame2im — преобразование кадра в графический образ;
· im2frame — преобразование графического образа в кадр.
Применение некоторых из этих команд мы рассмотрим далее на конкретных примерах. К сожалению, серьезные задачи анимации обычно требуют применения программных средств — главным образом циклов. Мы рассмотрим их далее, но представляется, что читатели знакомы с понятием циклов, так что приведенные примеры не будут слишком сложны. В крайнем случае, оставьте их разбор до знакомства с основами программирования в системе MATLAB (урок 20).
Вращение фигуры — логотипа MATLAB
Рассмотрим вначале не очень сложный пример вращения сложной трехмерной поверхности — логотипа системы MATLAB, который представлен файлами logo.m и logo.mat. Ниже представлен фрагмент программы, обеспечивающий вращение этой поверхности (фигуры) относительно осей системы координат:
if ~exist('MovieGUIFlag'). figNumber=0; end;
load logo
h=surfl(L.source);
colormap(M);
ax=[7 52 7 52 -.5 .8]:
axis(ax);
axis on:
shading interp;
m=moviein(25):
for n=l:25.
rotate(h.[0 90],15.[21 21 0]);
h=surfl(get(h.'XData'),get(h.'YData').
get(h.'ZData'),source);
axis(ax);
axis on;
shading interp;
m(:,n)=mvframe(figNumber,24); end;
mvstoretfigNumber.m);
Эта программа имеет два блока: в первом задается исходная функция и ее образ, а во втором (с циклом for) выполняется создание кадров и их последовательное воспроизведение, создающее эффект анимации. На рис. 7.3 показан стоп-кадр полученной анимации.
Рис. 7.3.Стоп-кадр программы, обеспечивающей вращение фигуры — логотипа MATLAB
Волновые колебания мембраны
Принцип мультипликации легко распространить на существенно более сложные задачи анимации. В качестве иллюстрации можно рассмотреть системный пример vibes, демонстрирующий волнообразные колебания тонкой пластины — мембраны. Ниже представлен переработанный файл данного примера, в котором сокращены подробные комментарии на английском языке и введены только для пояснения комментарии на русском языке, их следует изъять при попытке запустить программу:
%Волновые колебания мембраны
%Переработка файла VIBES фирмы MathWorks. Inc.
if~exist('MovieGUIFlag'): figNumber=0; end;
hlpStr= ...
[' Это пример анимации - наблюдение колебаний '
' трехмерной поверхности - мембраны. ']:
mvinit(figNumber.hlpStr):
% Загрузка данных функции
load vibesdat;
[n.n] = size(Ll):
nh = fix(n/2): .
x = (-nh:nh)/nh;
% Вычисление коэффициентов
clear с
for k = 1:12.
eval(['c(k) = L' num2str(k) '(24,13)73:'])
end;
% Установка графических параметров
axis([-11-11-11]); caxis(26.9*[-1.5 1]);
colormap(hot); hold on
% Генерация кадров мультипликации
delt = 0.1;
nf names =12:
M - moviein(nf names):
fon k - l:nf names,
% Коэффициенты
t = k*delt;
s = c.*sin(sqnt(1ambda)*t);
% Амплитуды
L = s(l)*Ll + s(2)*L2 + s(3)*L3 + s(4)*L4 +
s(5)*L5 + s(6)*L6 + .
S(7)*L7 + s(8)*l_8 + s(9)*L9 + s(10)*L10 +
s(ll)*Lll + s(12)*L12;
% Скорость мультипликации
s = s .* lambda;
V = s(l)*Ll + s(2)*L2 +'sC3)*L3 +
s(4)*L4 + s(5)*L5 + s(6)*L6 + ...
s(7)*L7 + s(8)*L8 + s(9)*L9 + s(10)*L10 +
s(11)*L11 + s(12)*L12;
% График поверхности; цвет задается скоростью
V(l:nh.l:nh) = NaN*ones(nh,nh);
Cla
sunf(x.x.L.V);
axis off
% Создание кадров мультипликации
M(:.k) - mvfname(f1gNumben,nfnames): end : hold off
%=======================================
% Запись кадров мультипликации
mvstone( figNumben , M) ;
Этот пример дан с целью иллюстрации, и подробно эту программу мы описывать не будем. К сожалению, в представленном виде (с русскоязычными комментариями), данная программа MATLAB 6 неработоспособна. Чтобы она работала, эти комментарии должны быть убраны или заменены англоязычными. В этом случае проблем с запуском программы не будет.