Animations et films avec Matlab
getframe
& movie2avi
Animations: une succession de graphiques
On peut tracer simplement des graphiques avec Matlab, c'est d'ailleurs là un de ses atouts majeurs.Une animation est donc aussi simple à réaliser, en créant une suite de graphiques, espacés par une
pause
(afin de laisser le temps à Matlab d'afficher effectivement le
graphique, et surtout à l'utilisateur le temps de le voir...).
clear all;close all;clc % Pour commencer proprement
tmax=13;
figure(1);clf;
hold on, % On superposera chaque graphique
view(3) % On impose la vue en 3D (angle de vue par défaut
J=jet; % jet est une palette de 64 couleurs
for k=0:0.1:tmax
t=k:0.01:k+1;
z=exp(-0.2*t+2*1i*pi*t);
c=round(63/tmax*k)+1; % J(c,:) ci-dessous désigne la c-ème couleur de la palette
% L'instruction graphique à proprement parler
plot3(t,real(z),imag(z),'linewidth',3,'color',J(c,:))
axis([0 10 -1 1 -1 1]);axis off
pause(0.05) % une courte pause...
end
ce qui fournit le résultat suivant:
Enregistrer une succession de graphique en vidéo
getframe
permet de capturer le graphique sous forme
d'image vidéo. Un film est alors une succession, ou matrice,
d'images getframe
, crée par exemple dans une boucle.
Le film ainsi fait peut se jouer avec
movie
.
Plus intéressant encore, on peut enregistrer le film
avi
avec movie2avi
(voir l'aide: help
movie2avi
pour voir la grande variété d'arguments, notamment
l'utilisation de codec particulier pour encoder le film, le niveau de
compression, et le nombre d'images par secondes FPS
). clear all;close all;clc % Pour commencer proprement
tmax=13;
figure(1);clf;
hold on, % On superposera chaque graphique
view(3) % On impose la vue en 3D (angle de vue par défaut
J=jet; % jet est une palette de 64 couleurs
GF=[];
for k=0:0.1:tmax
t=k:0.01:k+1;
z=exp(-0.2*t+2*1i*pi*t);
c=round(63/tmax*k)+1; % J(c,:) ci-dessous désigne la c-ème couleur de la palette
% L'instruction graphique à proprement parler
plot3(t,real(z),imag(z),'linewidth',3,'color',J(c,:))
axis([0 10 -1 1 -1 1]);axis off
GF=[GF getframe]; % On concatène successivement les images
% pause(0.05) une courte pause maintenant inutile...
end
movie2avi(GF,'film.avi');