Как я анимирую поверхность, если это - изменение координат вовремя (например, эллипсоид) использование MATLAB?
Хотите, чтобы анимация отображалась на экране или сохранить ее как видеофайл? Если вы хотите, чтобы анимация отображалась на экране, вы можете заставить свою программу многократно перерисовывать сюжет, который вы строите, с паузой там, как gnovice в своем ответе, который только что появился.
Если вы хотите сохранить файл для воспроизведения, я бы посоветовал посмотреть функцию movie
(учебник здесь ) и, возможно, вспомогательный инструмент mpgwrite из обмена файлами MATLAB.
Вот несколько примеров того, как можно анимировать графики в MATLAB ...
Вы может создать цикл, в котором вы изменяете координаты поверхности, обновляете объект графика с помощью команды set
и используете команду pause
, чтобы приостанавливать каждую итерацию цикла на короткий период времени. Вот пример:
[x, y, z] = ellipsoid(0, 0, 0, 4, 1, 1); % Make an ellipsoid shape
hMesh = mesh(x, y, z); % Plot the shape as a mesh
axis equal % Change the axis scaling
for longAxis = 4:-0.1:1
[x, y, z] = ellipsoid(0, 0, 0, longAxis, 1, 1); % Make a new ellipsoid
set(hMesh, 'XData', x, 'YData', y, 'ZData', z); % Update the mesh data
pause(0.25); % Pause for 1/4 second
end
Когда вы запустите вышеуказанное, вы должны увидеть, что длинная ось эллипсоида сжимается, пока не станет сферой.
Вы также можете использовать объект таймера вместо цикла для выполнения обновлений графика. В этом примере я сначала создам функцию timer_fcn
, которую я хочу выполнять каждый раз при срабатывании таймера:
function timer_fcn(obj,event,hMesh)
n = get(obj, 'TasksExecuted'); % The number of times the
% timer has fired already
[x, y, z] = ellipsoid(0, 0, 0, 4-(3*n/40), 1, 1); % Make a new ellipsoid
set(hMesh, 'XData', x, 'YData', y, 'ZData', z); % Update the mesh data
drawnow; % Force the display to update
end
Теперь я могу создать график и таймер и запустить таймер следующим образом:
[x, y, z] = ellipsoid(0, 0, 0, 4, 1, 1); % Make an ellipsoid shape
hMesh = mesh(x, y, z); % Plot the shape as a mesh
axis equal % Change the axis scaling
animationTimer = timer('ExecutionMode', 'fixedRate', ... % Fire at a fixed rate
'Period', 0.25, ... % every 0.25 seconds
'TasksToExecute', 40, ... % for 40 times and
'TimerFcn', {@timer_fcn, hMesh}); % run this function
start(animationTimer); % Start timer, which runs on its own until it ends
Это отобразит ту же анимацию, что и в примере цикла for. И как только вы закончите с объектом таймера, не забывайте всегда удалять его:
delete(animationTimer);
Если вам нужен простой способ создания анимации, взгляните на ANYMATE из обмена файлами. Посмотрите справку к файлу и примеры, чтобы увидеть, как вы делаете анимацию на рисунке или создаете анимированные гифки.
Взгляните на обзор anymate в выборе обмена файлами недели
EDIT
Вот как вы бы анимировали эллипсоид из примера @gnovice с помощью anymate
%# create an sphere
[xs,ys,zs] = sphere; %# default is center at 0, radius 1
%# create an ellipsoid
[xe,ye,ze] = ellipsoid(0,0,0,4,1,1);
%# use anymate to interpolate between the two
anymate(@surf,{cat(3,xe,xs) cat(3,ye,ys) cat(3,ze,zs)});
%# color the surface
colormap(jet);
%# fix axes
axis equal
На рисунке будет панель инструментов «фильм», где вы можете нажать «воспроизвести» и посмотреть анимацию. Или вы можете сохранить его в файл.