Animaciones en Maple José Luis Torres Rodríguez * Abril Una animación en Maple es una secuencia de gráficas que se muestran en sucesión dentro de una región de animación; estas regiones son similares a las de gráficas en dos tres dimensiones, pero incluen en la barra de conteto botones para controlar la animación. En Maple, las animaciones pueden crearse, tanto en dos como en tres dimensiones, de dos maneras diferentes. Una de estas formas es por medio de las funciones animate animated, las cuales generan automáticamente las gráficas de la animación a partir de los argumentos recibidos. La otra forma es generando manualmente las gráficas desplegandolas en sucesión por medio de displa o displad. A continuación revisaremos ambas formas.. Animaciones en dos dimensiones.. Animaciones creadas con animate La función animate nos permite crear animaciones de gráficos bidimensionales, producidos por funciones de una variable que dependen de un parámetro adicional, el cual hace el papel del tiempo. Esta función genera un conjunto de gráficas bidimensionales, las cuales se muestran en sucesión para simular la animación. animate forma parte del paquete plots. Su sintais es: animate(epr, =a..b, t=c..d, opciones); animate([f(,t), g(,t), h(,t),...], =a..b, t=c..d, opciones); Donde epr puede ser una función o epresión que depende de una variable del tiempo, dada en forma eplí cita o paramétrica. También se pueden incluir un conjunto de funciones como argumento. Las opciones aceptadas son las mismas de plot; adicionalmente, se puede incluir la opción frames=n, donde n es el número de gráficas que deben generarse en la animación, el valor por omisión es. Veamos un ejemplo: Generaremos una animación que nos muestre el comportamiento de una familia de funciones de la forma sin(*t), en el intervalo [-Pi..Pi], para t de a. Primero cargamos la función con with. > with(plots, animate); Y a continuación generamos la animación: [animate] * Coordinación de Cómputo, Facultad de Ciencias, UNAM
> animate(sin(*t), =-Pi..Pi, t=..);.5.5.5.5.5.5.5.5.5.5 Nota: En todos los ejemplos de animaciones de este capítulo se incluen varias gráficas, para mostrar al lector el aspecto de las animaciones. En una región que contiene una animación, la barra contetual nos proporciona un conjunto de elementos por medio de los cuales podemos tener el control ésta. A continuación se describe la función de cada uno de los componentes de esta barra:. Cada vez que el usuario selecciona con el ratón un punto sobre la animación, en esta región se muestran sus coordenadas.. Este botón nos permite detener la animación, una vez iniciada.. Este botón nos permite iniciar la animación.. Por medio de este botón podemos avanzar un cuadro a la vez.. Con este botón podemos hacer que la animación se muestre en sentido inverso.. Este botón nos permite hacer que la animación se muestre en sentido normal.. Este botón nos permite disminuir la velocidad con la que se muestra la animación. Por medio de este botón podemos incrementar la velocidad de la animación.. Este botón nos permite ejecutar la animación un ciclo a la vez.. Con este botón podemos hacer que la animación se muestre en un ciclo continuo. Veamos otro ejemplo, con una función paramétrica. > animate([t*sin(), t*cos(), =-Pi..Pi], t=.., view=[-..,-..]);
La siguiente animación muestra una función en coordenadas polares. Incluimos la opción frames=5, para generar 5 cuadros. > animate([u*t, t, t=..*pi], u=.., coords=polar, frames=5, > numpoints=, color=blue); Finalmente, tenemos una animación que inclue varias funciones. > animate({-^/u, sin(u*), ln(*u)}, =..Pi/, u=.., color=gold);................................ Animaciones en D por secuencia de gráficas Otra forma de crear animaciones en dos dimensiones consiste en generar cada una de las gráficas por separado despues mostrarlas en secuencia por medio de la función displa, agregando para ello la opción insequence=true. La función displa muestra generalmente en un solo despliegue las gráficas que recibe como argumento, al agregar la opción mencionada, las gráficas son mostradas secuencialmente, en el orden en que fueron colocadas como argumento, creando así la animación. Una ventaja de usar este método para crear una animación es que cada uno de los cuadros puede tener una estructura diferente. Por ejemplo, crearemos las gráficas de las funciones sin(n*)*ep(-^)*n, para n de a en [-Pi..Pi], cada una con un color diferente. Antes que nada, cargamos la instrucción displa, la cual pertenece al paquete plots. > with(plots, displa); [displa] A continuación generamos cada una de las gráficas: > g := plot(sin()*ep(-^), =-Pi..Pi, color=blue): > g := plot(sin(*)*ep(-^)*, =-Pi..Pi, color=gold): > g := plot(sin(*)*ep(-^)*, =-Pi..Pi, color=green): > g := plot(sin(*)*ep(-^)*, =-Pi..Pi, color=red): > g5 := plot(sin(5*)*ep(-^)*5, =-Pi..Pi, color=can): > g := plot(sin(*)*ep(-^)*, =-Pi..Pi, color=magenta): Finalmente mostramos la animación comenzando en la gráfica hasta la gráfica, despues regresando a la gráfica.
> displa([g, g, g, g, g5, g, g5, g, g, g, g], insequence=true);.... Las gráficas utilizadas en esta animación, tambien pudieron haber sido creadas a partir de una secuencia, por ejemplo de la siguiente forma: Primero generamos una lista para los colores. > lcol := [blue, gold, green, red, can, magenta]; lcol := [blue, gold, green, red, can, magenta] A continuación creamos la lista de gráficas usando una secuencia; recuerdese que todas ellas son de la forma sin(n*)*ep(-^)*n. Los colores serán tomados de la lista anterior. > graf := [seq(plot(sin(n*)*ep(-^)*n, =-Pi..Pi, color=lcol[n]), > n=..)]: Finalmente desplegamos las gráficas en secuencia con displa, usando la siguiente instrucción: > displa(graf, insequence=true); Los elementos de la lista de gráficas pueden ser invocados individualmente; por ejemplo, si queremos visualizar la segunda gráfica de graf. > graf[]; De la misma forma podemos referenciarlas para incluirlas en la animación. Por ejemplo, la siguiente instrucción genera la misma animación mostrada arriba: > displa([op(graf), graf[5], graf[], graf[], graf[], graf[]], > insequence=true);
Las regiones de animaciones en dos dimensiones pueden ser manipuladas de la misma forma que las gráficas bidimensionales; por ejemplo, para cambiar el tipo de ejes, o el estilo símbolo usado en las lineas, entre otras cosas.. Animaciones en tres dimensiones.. Animaciones con animated Análogamente a las animaciones en dos dimensiones, la instrucción animated nos permite crear animaciones tridimensionales, a partir de funciones que dependen de tres parámetros; los dos primeros son tomados como intervalos de graficación, mientras que el tercero puede ser considerado el tiempo. La sintais es: animated(f(,,t), =a..b, =c..d, t=p..q, opciones); animated([f(,,t), g(,,t), h(,,t),...], =a..b, =c..d, t=p..q, opciones); La función puede ser dada en forma eplicita, en forma de epresión o bien en forma paramétrica. Tambien se pueden incluir varias funciones en una misma animación. Las opciones aceptadas por animated son las mismas de plotd. Adicionalmente se puede incluir la opción frames=n, para indicar la cantidad de cuadros que formarán la animación. Veamos un ejemplo. Generaremos la animación de la familia de funciones cos(t*)*sin(t*), para =-Pi..Pi, =-Pi..Pi, haciendo variar t de a 5. Antes cargamos la función animated, del paquete plots. > with(plots, animated): > animated(cos(t*)*sin(t*), =-Pi..Pi, =-Pi..Pi, t=..5, > aes=framed, orientation=[,]);.5.5.....5.5.....5.5 Los botones de la barra de conteto para animaciones tridimensionales tienen el mismo funcionamiento que en el caso de dos dimensiones. La única diferencia es que, en este caso, no es posible seleccionar con el ratón puntos en la gráfica para ver sus coordenadas. En lugar de las coordenadas, aparecen los menús: Con éstos es posible modificar la orientación de las gráficas de la animación. Lo mismo puede hacerse directamente sobre la región de la animación con el ratón, en la misma forma que se manipulan las gráficas tridimensionales. Veamos ahora un ejemplo con una forma paramétrica. 5
> animated([t*, -t, *cos(t*)], =-..*Pi, =.., t=..5, > aes=boed); Por último, tenemos un ejemplo que inclue varias funciones. > animated({t**sin(), t**, t*(^ + ^)}, =-Pi..Pi, =-Pi..Pi, > t=.., orientation=[5,], view=-5..5);.. Animaciones en D por secuencia de gráficas Otro de los métodos para crear animaciones en tres dimensiones es generar cada una de las gráficas despues mostrarlas en secuencia por medio de la función displad, incluendo la opción insequence=true (de la misma forma que en el caso de dos dimensiones). Por ejemplo, usando la instrucción sphereplot, generaremos las gráficas de 5 esferas con centro en el origen, de radio r=,,,, 5, las mostraremos en secuencia. > with(plots, sphereplot, displad); [sphereplot, displad] > esferas := [seq(sphereplot(r, theta=..*pi, phi=..pi), r=..5)]: > displad(esferas, insequence=true, aes=framed); z z z z z En el siguiente ejemplo, generaremos una animación para la gráfica de f(,)=(.)^*sin(). En este caso, el parámetro t no afecta a la gráfica sino a su orientación, modificaremos el ángulo theta de -5 a grados; lo que obtenemos con esto es una animación que muestra la gráfica desde distintos ángulos. Primero generamos la secuencia. Cada una de las gráficas es de la forma: plotd((.)^*sin(), =-.., =..Pi, coords=spherical, orientation=[ang, 5]) Donde ang debe variar de -5 a grados.
> anm := [seq(plotd((.)^*sin(), =-.., =..Pi, coords=spherical, > orientation=[-5 + *t,5]), t=..5)]: Finalmente mostramos estas gráficas en secuencia. > displad(anm, insequence=true); 7