martes, marzo 13, 2007

Cómo hacer un gif con Octave o Matlab

Introducción


Para algunos trabajos o presentaciones, mejor que un esquema, es una animación.
En nuestro caso teniendo ecuaciones de movimiento podemos hacer una en formato gif, que se pueden pegar en un Pagüer-point u OpenOffice.
En una entrada anterior se muestra como hacer una  animación en matlab con un sistema mecánico. animación en matlab con un sistema mecánico.
Esas animaciones las podemos guardar como videos *.avi, pero como ese formato pesa mucho, personalmente prefiero los gifs.

La gran pregunta es ¿Cómo se hacen los gifs?

El problema se divide en dos partes: hacer el grupo de imágenes y luego hacer el gif, para hacer el grupo de imágenes usamos matlab u Octave.
Para la segunda parte hay dos alternativas:

Alternativa 1 Hacer el gif en la página make a gif

Ya con el grupo de imágenes vamos a internet, a la página Make a gif dónde puedes cargar tus imágenes y regular la velocidad.

Alternativa 2 consola linux 

Con la consola linux, basta tener ordenados por orden alfabético los archivos de una misma extensión y hechar a correr el siguiente comando

convert -delay 5 -loop 0 *.png animacion.gif

En este blog se muestra una explicación más detallada del comando de arriba.


Ejemplos


Ejemplo para MATLAB


El ejemplo son puntos de una parábola puse las ecuaciones de movimiento parametrizadas.


Lo que se debería ver parecido al gif de arriba (no exactamente igual).


Nótese que la estrategia para guardar imágenes en matlab es el comando getframe y el comando imwrite. Es necesario decir que ambos comandos son útiles en matlab, pero no en Octave, por eso a continuación la versión de Octave.



Ejemplo para Octave

El mismo ejemplo con los puntos de una parábola y las ecuaciones de movimiento parametrizadas.
La diferencia está en el uso del comando print, cuyas entradas son la figura a graficar, el nombre del archivo y el formato.

Nótese que el comando print tiene como entrada:

La figura, que tiene como nombre el i-ésimo paso por el ciclo for ( la variable i )
Notar que los nombres con una i menor a 10 tienen un cero anterior, esto es para poder ordenar los nombres al crear el gif por consola
El nombre del archivo que se define también con el i-ésimo paso por el ciclo for (la variable i)
La extensión png, que en este caso es la cadena '-dpng'

Después de usar el método de la consola con el comando convert el resultado es el de más abajo. Nótese también el cambio del grosor de las lineas usando en el comando plot la cadena linewidth y el cambio del tamaño del marcador usando en el comando plot el parámetro markersize.



¿Está bien? Cualquier comentario, observación es bienvenida