Анимация в MATLAB

Как я анимирую поверхность, если это - изменение координат вовремя (например, эллипсоид) использование MATLAB?

13
задан gnovice 23 September 2017 в 17:37
поделиться

3 ответа

Хотите, чтобы анимация отображалась на экране или сохранить ее как видеофайл? Если вы хотите, чтобы анимация отображалась на экране, вы можете заставить свою программу многократно перерисовывать сюжет, который вы строите, с паузой там, как gnovice в своем ответе, который только что появился.

Если вы хотите сохранить файл для воспроизведения, я бы посоветовал посмотреть функцию movie (учебник здесь ) и, возможно, вспомогательный инструмент mpgwrite из обмена файлами MATLAB.

3
ответ дан 1 December 2019 в 22:56
поделиться

Вот несколько примеров того, как можно анимировать графики в MATLAB ...

Измените график в цикле for:

Вы может создать цикл, в котором вы изменяете координаты поверхности, обновляете объект графика с помощью команды 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);
15
ответ дан 1 December 2019 в 22:56
поделиться

Если вам нужен простой способ создания анимации, взгляните на 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

На рисунке будет панель инструментов «фильм», где вы можете нажать «воспроизвести» и посмотреть анимацию. Или вы можете сохранить его в файл.

2
ответ дан 1 December 2019 в 22:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: