Está en la página 1de 8

ANIMACIN

Existen dos tcnicas para crear una animacin en MATLAB:


volver a dibujar y borrar
crear una pelcula
En cada caso se usan grficos handle para crear la animacin.
Volver a dibujar y borrar
Para crear una animacin mediante volver a dibujar y borrar, primero cree una
grfica y luego ajuste las propiedades de la grfica cada vez mediante un
bucle. Considere el siguiente ejemplo: puede definir un conjunto de parbolas
con la ecuacin
Cada valor de k define una parbola diferente. Podra representar los datos con
una grfica tridimensional; sin embargo, otro enfoque sera crear una
animacin en la que se dibuje una serie de grficas, cada una con un valor
diferente de k. el cdigo para crear dicha animacin es el siguiente:
Primera animacin
clear,clc,clf
x=-10:0.01:10; %Define el dominio
k=-1;
%Establece un valor inicial para
k
y=k*x.^2-2;
%Primer conjunto para el
rango y
h=plot(x,y);
%Crea la grafica con
asignacin al handle h
grid on
%set(h,'EraseMode','xor') %Acelera la
animacin
axis([-10 10 -100 100]); %Ajusta los ejes
while k<1
%Inicio de un ciclo
k=k+0.01;
%Contador
y=k*x.^2-2;
%Reclculo de y
set(h,'XData',x,'YData',y) %Reasigna los
valores de x, y
drawnow
%Vuelve a dibujar la grfica
ahora
end

Pegue el resultado

En este ejemplo se usaron grficos handle para volver a dibujar la grfica cada
vez mediante el bucle, en lugar de crear una nueva ventana de figura cada vez
que pasa por el bucle. Adems, se usaron los objetos XData y YData de la
grfica. Estos objetos asignan los puntos de datos a graficar. Usar la funcin set
le permite especificar nuevos valores de x y y y crear una grfica diferente
cada vez que se llama la funcin drawnow.
set(h,'EraseMode','xor')

Si activa esta lnea al remover el operador comentario (%), el programa no


borra toda la grfica cada vez que se vuelve a dibujar la grfica. Slo cambian
los pixeles que cambian color. Esto hace que la animacin corra ms rpido,
una caracterstica que es importante cuando la grfica es ms complicada que
la simple parbola usada en este ejemplo.
Pelculas
Animar la pelcula de una lnea no es computacionalmente intenso y es fcil
obtener un movimiento suave y agradable. Considere este cdigo que produce
animacin de grfica de superficie ms complicada:
Ingresar este cdigo
clear,clc
x=0:pi/100:4*pi;
y=x;
[X,Y]=meshgrid(x,y);
z=3*sin(X)+cos(Y);
h=surf(z);
axis tight
%Indica la sustitucin de la superficie
no del eje
set(gca,'nextplot','replacechildren');
shading interp
colormap(jet)
for k=0:pi/100:2*pi
z=(sin(X)+cos(Y)).*sin(k);
set(h,'ZData',z)
drawnow
end

Pegar resultado.

Si tiene una computadora rpida, la animacin parecer suave. Sin embargo,


en una computadora ms lenta puede ver movimiento espasmdico y pausas
mientras el programa crea cada nueva grfica. Para evitar este problema,
puede crear un programa que capture cada cuadro y luego, una vez que
todos los clculos estn hechos, reproducir los cuadros como una pelcula.
Ingresar este cdigo
clear,clc
x=0:pi/100:4*pi;
y=x;
[X,Y]=meshgrid(x,y);
z=3*sin(X)+cos(Y);
h=surf(z);
axis tight
%Indica la sustitucin de la superficie
no del eje
set(gca,'nextplot','replacechildren');
shading interp
colormap(jet)
m=1;

Pegar resultado.

for k=0:pi/100:2*pi
z=(sin(X)+cos(Y)).*sin(k);
set(h,'ZData',z)
M(m)=getframe; %Crea y guarda
c/cuadro
m=m+1;
end
movie(M,2) %Reproduce loa pelcula
2 veces
Cuando corre este programa, en realidad ver la pelcula cuatro veces: una vez
cuando se crea, una vez cuando se carga en el reproductor de pelculas y las
dos veces especificadas en la funcin movie. Una ventaja de este enfoque es
que puede reproducir la pelcula de nuevo sin volver a hacer los clculos, pues
la informacin se almacena (en el ejemplo) en el arreglo llamado M. Note en la
ventana del rea de trabajo Workspace que M es un arreglo estructura
moderadamente grande (~90 MB).
Transparencia
Cuando se representan superficies en MATLAB, se usa un esquema de
coloracin opaco. Este enfoque es estupendo para muchas superficies, pero
puede oscurecer detalles de otras. Tome, por ejemplo, esta serie de comandos
que crean dos esferas, una dentro de la otra:
Ingresar este cdigo
clear,clc,clf
n=20;
Theta=linspace(-pi,pi,n);
Phi=linspace(-pi/2,pi/2,n);
[theta,phi]=meshgrid(Theta,Phi);
X=cos(phi).*cos(theta);
Y=cos(phi).*sin(theta);
Z=sin(phi);
surf(X,Y,Z);
axis square
axis ([-2 2 -2 2 -2 2])
hold on
pause
surf(2*X,2*Y,2*Z)
pause
alpha(0.5)
box of
axis of

Pegar resultado.

La esfera interior est oculta por la esfera exterior hasta que se emite el
comando de transparencia,
alpha(0.5)

que establece el nivel de transparencia. Un valor de 1 corresponde a opaco y 0


a completamente transparente.
Lneas ocultas
Cuando se crean grficas de malla, cualquier parte de la superficie que est
oscurecida no se dibuja. Por lo general, esto hace que la grfica sea ms
sencilla de interpretar. Las dos esferas que se dibujen se crean con el uso de
las coordenadas X, Y y Z calculadas en el ejercicio anterior. Aqu estn los
comandos MATLAB:
Ingresar este cdigo
figure(3)
subplot(1,2,1)
mesh(X,Y,Z)
axis square
subplot(1,2,2)
mesh(X,Y,Z)
axis square
hidden of

Pegar resultado.

El valor por defecto para el comando hidden es on, que produce grficas de
malla en las que las lneas oscuras se ocultan automticamente
Iluminacin
MATLAB incluye extensas tcnicas para manipular la iluminacin que se usa
para representar grficas de superficie. La posicin de la luz virtual se puede
cambiar e incluso manipular durante animaciones. La barra de herramientas
figura incluye iconos que le permiten ajustar interactivamente la iluminacin,
de modo que puede obtener justo el efecto que quiera. Sin embargo, la
mayora de las grficas realmente necesitan que la iluminacin slo se apague
o encienda, lo que se logra con la funcin camlight. (Por defecto es apagado.).
El cdigo a usar es
Sphere
camlight
La posicin por defecto para la luz es arriba y a la derecha de la cmara. Las
opciones incluyen las siguientes:
camlight right
arriba y a la derecha de la cmara (por defecto)
camlight left
arriba y a la izquierda de la cmara
camlight headlight
colocada sobre la cmara
camlight(azimuth,elevation)
usted determina la posicin de la luz
camlight(infinite)
modela una fuente de luz ubicada en el infinito (como
el Sol)

Otros ejemplos
Ingresar este cdigo
%movie cuerda
x=linspace(0,2*pi,1000);
n=50;
%nmero de fotogramas
for j=1:n
t=(2*pi/49)*(j-1);
y=sin(t)*sin(x);
plot(x,y,'*')
axis([0 2*pi -1.2 1.2])
F(j)=getframe;
end
movie(F,2)

Pegar resultado.

Ingresar este cdigo


% movie
n=30;
x=linspace(0,2*pi,200);
for j=1:n
t=(pi/29)*(j-1);
plot(cos(x),sin(t)*sin(x),'rs')
axis([-1 1 -1 1])
F(j)=getframe;
end
movie(F,5)

Pegar resultado.

Ingresar este cdigo


% movie
[x,y,z]=peaks;
n=20;
for j=1:n
t=(2*pi/19)*(j-1);
z1=sin(t)*z;
surf(x,y,z)
axis([-3 3 -3 3 -5 5])
F(j)=getframe;
end

Pegar resultado.

movie(F,3)

Proyecto:
Se requiere crear una animacin de un mecanismo de de manivela. La
distancia horizontal del movimiento del deslizador como funcin del ngulo de
rotacin de la manivela es

s=a cos + b2 ( a sin e )


0 2

en posiciones igualmente espaciadas n = 40


a = 1 b = 2.5 e = 0.25 c = 0.5 d = 1 f = 0.06
El nmero de repeticin es 5 (= nF)

Las funciones que se usan para crear una pelcula son


A(k) = getframe
que captura el k-simo frame de un total de N frames
movie(A, nF, pbs)
que se usa para reproducir nF veces los N frames capturados en la matriz A por
getframe. Esta funcin reproduce la secuencia a una velocidad pbs, que si se
omite se usa el valor por defecto 12 frames por segundo
Para crear una pelcula en el formato avi (audio/video interleaved) a partir de la
pelcula creada con movie, se usa
movie2avi(A, 'FileName.avi', 'KeyWord', 'KeyWordValue');
La variable A es la variable usada en movie

Para crear pelculas que pueden ser mostrados en Microsoft Power Point, se
asigna
'KeyWord' = 'compression'
'KeyWordValue' = 'none'

Ingresar este cdigo


n = 40; phi = linspace(0, 2*pi, n);
a = 1; b = 2.5; e = 0.25; nF = 5;
c = 0.5; d = 1; f = 0.06;
ax = a*cos(phi); ay = a*sin(phi);
s = real(ax+sqrt(b^2-(ay-e).^2));
v = [1.1*min(ax), 1.1*(max(s)+d/2)
1.1*min(ay), 1.1*max(ay)];
xgnd = [min(ax), max(s)+d/2, max(s)
+d/2, min(ax), min(ax)];
ygnd = [e, e, e-f, e-f, e];
slidery = [e, e+c, e+c, e, e]; %
Componente vertical del deslizador
es constante
for k=1:n
fill(xgnd, ygnd, 'r') % Barra horizontal
hold on
plot(ax, ay, 'b--', 0, 0, 'ko'); % circulo
punteado y centro de circulo
sliderx = [s(k)-d/2, s(k)-d/2, s(k)+d/2,
s(k)+d/2, s(k)-d/2];
fill(sliderx, slidery, 'm'); % posicion
slider
plot([0 ax(k)], [0;ay(k)], 'ko-',
'LineWidth', 2);
plot([ax(k), s(k)], [ay(k), e+c/2], 'ko-',
'LineWidth', 2);
axis(v)
axis of equal
ManivelaFrame(k) = getframe;
hold of
end
movie(ManivelaFrame, nF, 30)
movie2avi(ManivelaFrame,
Manivela.avi', 'compression', 'none')

Pegar resultado.

También podría gustarte