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');




Voir aussi:
Haut de la page Lien