Ответ 1
Вот несколько примеров способов анимации графиков в 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-loop. И как только вы закончите с объектом таймера, не забудьте всегда его удалять:
delete(animationTimer);