Contenido principal

Técnicas de animación

R2026b

Puede utilizar varias técnicas para crear animaciones en MATLAB®.

TécnicaDescripciónEjemplo

Actualizar datos en un bucle.

Actualice las propiedades de un objeto de gráficas y muestre las actualizaciones en la pantalla en un bucle.

Esta técnica es útil para crear animaciones cuando la mayor parte de la gráfica permanece igual.

Crear animaciones actualizando los datos en un bucle

Aplicar transformaciones de matrices.

Agrupe objetos de gráficas y aplique transformaciones a todo el grupo en conjunto.

Esta técnica es útil si desea cambiar la posición y la orientación de un grupo de objetos a la vez.

Crear animaciones con la transformación de matrices

Crear un archivo GIF animado.

Actualice una figura y capture los fotogramas de un archivo GIF animado usando la función exportgraphics en un bucle.

Esta técnica es útil para crear animaciones que desea almacenar y volver a reproducir.

Crear un archivo GIF animado

Crear un vídeo.

Actualice una figura y capture los fotogramas de un vídeo usando la función getframe en un bucle.

Esta técnica es útil para animaciones complejas que no se muestran rápidamente en tiempo real o cuando desea almacenar y volver a reproducir una animación. Use la función movie para reproducir el vídeo.

Crear y reproducir un vídeo

Crear una línea animada.

Cree animaciones de líneas de datos usando la función animatedline.

Esta técnica es útil para optimizar animaciones de líneas.

Crear una línea animada

Utilizar funciones de animación especializadas.

Para animaciones más especializadas, puede utilizar funciones como comet, comet3 y streamparticles.

Create Stream Particle Animations

Crear animaciones actualizando los datos en un bucle

Cree una animación de un marcador que se mueve por una línea.

  • Represente una onda sinusoidal. A continuación, cree un marcador y guárdelo como variable mkr para poder acceder a sus propiedades más adelante.

  • Utilice las funciones xlim, ylim y zlim para establecer los límites de cada eje. Al establecer los límites se deshabilita el cálculo automático de los límites de los ejes, lo que puede provocar que la animación parpadee y se ralentice.

  • Cree un bucle for que actualice las coordenadas del marcador. Cambie las propiedades XData e YData del objeto Scatter (mkr) en cada iteración para mover el marcador a lo largo de la línea.

  • Llame a la función drawnow al final de cada iteración de bucle para actualizar la visualización de la figura.

x = linspace(0,10,500);
y = sin(x);

% Plot a line and create a marker
plot(x,y)
hold on
mkr = scatter(NaN,NaN,[],"red","filled");
hold off
xlim([0 10])
ylim([-1 1])
zlim([-1 1])

% Move the marker along the line
for i = 1:length(x)
    mkr.XData = x(i);
    mkr.YData = y(i);
    drawnow
end

Animation of a red marker tracing a line plot of a sine wave

Crear animaciones con la transformación de matrices

Una forma eficaz de animar una gráfica es aplicar una matriz de transformación a uno o varios objetos en lugar de iterar sobre todos los puntos. En esta técnica, se agrupan uno o varios objetos de gráficas como elementos secundarios de un objeto Transform y, después, se establece la propiedad Matrix del objeto Transform para ajustar la posición de todos sus elementos secundarios. Las transformaciones que se pueden utilizar incluyen traslación, rotación y escalado. También puede definir su propia matriz de transformación.

Cree una animación de una esfera giratoria.

  • Cree las coordenadas de una esfera con la función sphere.

  • Cree un objeto Transform denominado grp utilizando la función hgtransform. Después, represente la esfera como un objeto Surface llamando a la función surf y especificando grp como el objeto principal.

  • Visualice las líneas de cuadrícula de los ejes y muestre el cuadro de la gráfica en una vista 3D.

  • Cree un bucle for que recorra 300 valores de ángulo equidistantes de 0 a 2π y que rote la esfera un pequeño ángulo en cada iteración. Use la función makehgtform para crear la matriz de transformación para cada pequeño ángulo de rotación. Después, establezca la propiedad Matrix de grp para realizar la rotación.

  • Llame a la función drawnow al final de cada iteración de bucle para actualizar la visualización de la figura.

% Create the coordinates of a sphere
ax = axes;
[x,y,z] = sphere(270);

% Create transform object and plot the sphere
grp = hgtransform(Parent=ax);
s = surf(ax,x,y,z,z,Parent=grp,EdgeColor="none");

% Display grid lines and show the plot box in 3-D
grid on
view(3)
axis vis3d
axis tight manual

% Rotate the sphere by small angles in a loop
for ang = linspace(0,2*pi,300)
   tm = makehgtform("axisrotate",[1,1,1],ang);
   grp.Matrix = tm;
   drawnow
end

Crear un archivo GIF animado

Cree un archivo GIF animado de un marcador que se mueve por una parábola.

  • Represente una parábola con un marcador.

  • Cree un bucle for que cambie la ubicación del marcador en cada iteración.

  • Al final de cada iteración del bucle, capture la figura como un fotograma de un archivo GIF animado con la función exportgraphics. Para la primera iteración del bucle, establezca el argumento nombre-valor Append en false para crear un archivo nuevo con el primer fotograma. A continuación, para el resto de iteraciones del bucle, establezca el argumento nombre-valor Append en true para capturar el fotograma actual y añadirlo al archivo GIF especificado.

  • El archivo parabola.gif resultante se guarda en la carpeta actual.

% Plot a parabola and a marker
x = -10:0.5:10;
y = x.^2;
p = plot(x,y,"-o",MarkerFaceColor="red");

% Move the marker along the parabola and capture frames in a loop
for i = 1:41
    p.MarkerIndices = i;
    if i == 1
        exportgraphics(gca,"parabola.gif",Append=false)
    else    
        exportgraphics(gca,"parabola.gif",Append=true)
    end 
end

Animation of a red marker tracing a line plot of a parabola

Crear y reproducir un vídeo

Cree un vídeo de una gráfica de superficie que cambia de forma utilizando la función getframe en un bucle. La función getframe captura los fotogramas de vídeo en un arreglo de estructuras y se usa la función movie para reproducir el vídeo.

  • Represente las coordenadas de la función peaks como una superficie utilizando la función surf y guarde el objeto Surface como variable s.

  • Coloque el cuadro de la gráfica ajustado estrictamente a la superficie y congele los límites de los ejes con el comando axis tight manual.

  • Cree un arreglo de 40 estructuras denominado F para contener los fotogramas de la animación.

  • Cree un bucle for que cambie la forma de la superficie en cada iteración.

  • Al final de cada iteración de bucle, actualice la figura con el comando drawnow y capture un fotograma del vídeo utilizando la función getframe.

  • El vídeo resultante se guarda como arreglo de estructuras F.

% Plot a surface
Z = peaks;
s = surf(Z);
axis tight manual

% Change the shape of the surface and capture frames
loops = 40;
F(loops) = struct("cdata",[],"colormap",[]);
for j = 1:loops
    Zframe = sin(j*pi/10)*Z;
    s.ZData = Zframe;
    drawnow
    F(j) = getframe(gcf);
end

Reproduzca el vídeo dos veces.

fig = figure;
movie(fig,F,2)

Crear una línea animada

La función animatedline le ayuda a optimizar las animaciones de líneas. Le permite añadir nuevos puntos a una línea sin volver a definir los ya existentes.

Cree una animación de dos líneas crecientes.

  • Cree dos líneas animadas de colores distintos.

  • Establezca los límites de los ejes antes del bucle para evitar volver a calcular los límites en cada iteración del bucle.

  • Cree un bucle for que añada puntos a las líneas.

  • Utilice drawnow o drawnow limitrate al final de cada iteración del bucle para actualizar la visualización de la figura.

% Create two animated lines of different colors
a1 = animatedline(Color=[0 0.7 0.7]);
a2 = animatedline(Color=[0 0.5 0.5]);
axis([0 20 -1 1])
drawnow

x = linspace(0,20,10000);
for k = 1:length(x)
    % Add to first line
    xk = x(k);
    ysin = sin(xk);
    addpoints(a1,xk,ysin);

    % Add to second line
    ycos = cos(xk);
    addpoints(a2,xk,ycos);

    % Update screen
    drawnow limitrate
end

Animation of two lines growing as they accumulate data

Consulte también

Funciones

Temas