Visualización usando VTK (Manual de Maxima 5.45.0)

Anterior: Análisis gráfico de sistemas dinámicos discretos, Subir: dynamics [Índice general][Índice]

### 49.3 Visualización usando VTK

La función scene crea imágenes tridimensionales y animaciones usando el software Visualization ToolKit (VTK). Para poder usar esa función es necesario tener Xmaxima y VTK instalados en el sistema (incluyendo la biblioteca para usar VTK desde TCL que en algunos sistemas viene en un paquete separado).

Función: scene (objetos, …, opciones, …);

  Acepta una lista vacía o una lista de varios `objetos` y `opciones`. El programa ejecuta Xmaxima, que abre una ventana donde se representan los objetos dados, en un espacio tridimensional y aplicando las opciones dadas. Cada objeto debe pertenecer una de las 4 clases: sphere, cube, cylinder o cone (ver `Objetos de scene`). Los objetos se identifican dando el nombre de su clase, o una lista en que el primer elemento es el nombre de la clase y los restantes elementos son opciones para ese objeto.

  Ejemplo. Una pirámide hexagonal con fondo azul:

      (%i1) scene(cone, [background,"#9980e5"])$

  Presionando el botón izquierdo del ratón mientras se mueve dentro de la ventana gráfica, se puede rotar la cámara, mostrando diferentes vistas de la pirámide. Las dos opciones `elevation` y `azimuth` se pueden usar también para cambiar la orientación de la cámara. La cámara se puede mover presionando el botón del medio y moviendo el ratón y el botón del lado derecho se usa para aumentar o disminuir el zoom, moviendo el ratón para arriba y para bajo.

  Cada opción de un objeto deberá ser una lista comenzando con el nombre de la opción, seguido por su valor. La lista de posibles opciones se encuentra en la sección `Opciones de objetos de scene`.

  Ejemplo. Este ejemplo mostrará una esfera cayendo para el piso y rebotando sin perder energía. Para comenzar o poner en pausa la animación se debe oprimir el botón de play/pausa.

      (%i1) p: makelist ([0,0,2.1- 9.8*t^2/2], t, 0, 0.64, 0.01)$

      (%i2) p: append (p, reverse(p))$

      (%i3) bola: [sphere, [radius,0.1], [thetaresolution,20],
        [phiresolution,20], [position,0,0,2.1], [color,red],
        [animate,position,p]]$

      (%i4) piso: [cube, [xlength,2], [ylength,2], [zlength,0.2],
        [position,0,0,-0.1],[color,violet]]$

      (%i5) scene (bola, piso, restart)$

  La opción restart fue usada para hacer que la animación recomienze cada vez que se llega al último punto en la lista. Los valores permitidos para los colores son los mismo que para la opción `color` de plot2d.

#### 49.3.1 Opciones de scene

Opción de scene: azimuth [azimuth, ángulo]

  Valor predefinido: `135`

  La rotación de la cámara en el plano horizontal (x, y). ángulo debe ser un número real; un ángulo de 0 significa que la cámara apunta en la dirección del eje y, haciendo que el eje x aparezca a la derecha.

Opción de scene: background [background, color]

  Valor predefinido: `black`

  El color del fondo de la ventana gráfica. Acepta nombres de colores o secuencias de caracteres hexadecimales para rojo-verde-azul (ver la opción `color` de plot2d).

Opción de scene: elevation [elevation, ángulo]

  Valor predefinido: `30`

  La rotación vertical de la cámara. El ángulo debe ser un número real; un ángulo de 0 significa que la cámara apunta en la horizontal y el valor predefinido de 30 significa que la cámara apunta 30 grados para abajo de la horizontal.

Opción de scene: height [height, pixels]

  Valor predefinido: `500`

  La altura, en pixels, de la ventana gráfica. pixels debe ser un número entero positivo.

Opción de scene: restart [restart, valor]

  Valor predefinido: `false`

  Un valor ’true’ significa que la animación recomenzará automáticamente cuando llegue al final. Escribir simplemente “restart” es equivalente a escribir [restart, true].

Opción de scene: tstep [tstep, tiempo]

  Valor predefinido: `10`

  El intervalo de tiempo, en milisegundos, entre iteraciones consecutivas de las partes de una animación. tiempo debe ser un número real.

Opción de scene: width [width, pixels]

  Valor predefinido: `500`

  El ancho, en pixels, de la ventana gráfica. pixels deberá ser un número entero positivo.

Opción de scene: windowname [windowtitle, nombre]

  Valor predefinido: `.scene`

  nombre deberá ser una secuencia de caracteres que pueda ser usada para el nombre de una ventana de Tk, creada por Xmaxima para los gráficos de `scene`. El valor predefinido `.scene` implica que será creada una nueva ventana.

Opción de scene: windowtitle [windowtitle, nombre]

  Valor predefinido: `Xmaxima: scene`

  nombre debe ser una secuencia de caracteres que serán escritos en el encabezado de la ventana creada por `scene`.

#### 49.3.2 Objetos de scene

Objeto de scene: cone [cone, opciones]

  Crea una pirámide regular con altura 1 unidad y base hexagonal con vértices a 0.5 unidades del eje. Las opciones `height` y `radius` se pueden usar para alterar esos valores predefinidos y la opción `resolution` se usa para alterar el número de aristas de la base; valores mayores harán que la pirámide parezca un cono. Por omisión, el eje estará a lo largo del eje x, el punto medio de la altura estará en el origen y el vértice en el lado positivo del eje x; las opciones `orientation` y `center` permiten alterar eso.

  Ejemplo. El siguiente comando muestra una pirámide que comienza a dar vueltas cuando se oprime el botón de animación.

      (%i1) scene([cone, [orientation,0,30,0], [tstep,100],
         [animate,orientation,makelist([0,30,i],i,5,360,5)]], restart)$

Objeto de scene: cube [cube, opciones]

  Un cubo con aristas de 1 unidad y caras paralelas al los planos xy, xz y yz. Las longitudes de las 3 aristas se pueden modificar con las opciones `xlength`, `ylength` y `zlength`, convirtiéndolo en un paralelepípedo y las caras se pueden hacer rotar con la opción `orientation`.

Objeto de scene: cylinder [cylinder, opciones]

  Crea un prisma regular con altura de 1 unidad y base hexagonal con los vértices a 0.5 unidades del eje. Las opciones `height` y `radius` permiten modificar esos valores predefinidos y la opción `resolution` se puede usar para modificar el número de aristas de la base; valores mayores tornan el prisma más parecido a un cilindro. La altura predefinida se puede alterar con la opción `height`. Por omisión el eje estará orientado a lo largo del eje x, y el punto medio de la altura estará en el origen; se pueden cambiar esas propiedades con las opciones `orientation` y `center`.

Objeto de scene: sphere [sphere, opciones]

  Una esfera de radio igual a 0.5 unidades y centro en el origen.

#### 49.3.3 Opciones de objetos de scene

Opción de objeto: animation [animation, propiedad, posiciones]

  propiedad deberá ser una de las 4 siguientes propiedades del objeto: `origin`, `scale`, `position` o `orientation` y posiciones deberá ser una lista de puntos. Cuando se oprime el botón “play”, esa propiedad tomará sucesivamente los valores en la lista, en intervalos regulares de tiempo definidos por la opción `tstep`. El botón de volver al comienzo puede usarse para recomenzar desde el principio de la lista, haciendo que la animación comience nuevamente cuando se presione otra vez el botón de play.

  Consulte también `track`.

Opción de objeto: capping [capping, número]

  Valor predefinido: `1`

  En un objeto “cone” o “cylinder”, determina si la base (o bases) se muestran o no. Un valor de 1 para número torna la base visible y un valor de 0 la hace invisible.

Opción de objeto: center [center, punto]

  Valor predefinido: `[0, 0, 0]`

  Coordenadas del centro geométrico del objeto, en relación a su posición (`position`); punto puede ser una lista de 3 números reales o 3 números separados por comas. En objetos de clase “cylinder”,”cone” o “cube” estará localizado en el punto medio de la altura y en objetos de clase “sphere” estará en su centro.

Opción de objeto: color [color, nombre]

  Valor predefinido: `white`

  El color del objeto. Acepta nombres de colores conocidos o secuencias de 6 dígitos (rojo-verde-azul) precedidos por # (ver la opción `color` de plot2d).

Opción de objeto: endphi [endphi, ángulo]

  Valor predefinido: `180`

  En una esfera, phi es el ángulo en el plano vertical que pasa por el eje z, medido a partir de la parte positiva del eje z. ángulo debe ser un múmero entre 0 y 180 que determina el valor final de phi hasta donde se mostrará la superficie. Valores menores que 180 eliminan una parte de la superficie.

  Consulte también `startphi` y `phiresolution`.

Opción de objeto: endtheta [endtheta, ángulo]

  Valor predefinido: `360`

  En una esfera, theta es el ángulo en el plano horizontal (longitud), medido desde la parte positiva del eje x. ángulo debe ser un número entre 0 y 360 que determina el valor final donde la superficie terminará. Valores menores que 360 hacen que se elimine una parte de la superficie de la esfera.

  Consulte también `starttheta` y `thetaresolution`.

Opción de objeto: height [height, valor]

  Valor predefinido: `1`

  valor debe ser un número positivo que define la altura de un cono o cilindro.

Opción de objeto: linewidth [linewidth, valor]

  Valor predefinido: `1`

  El ancho de las líneas cuando se usa la opción `wireframe`. valor debe ser un número positivo.

Opción de objeto: opacity [opacity, valor]

  Valor predefinido: `1`

  valor debe se un número entre 0 y 1. Cuanto menor sea el número, mas transparente será el objeto. El valor predefinido de 1 implica un objeto completamente opaco.

Opción de objeto: orientation [orientation, ángulos]

  Valor predefinido: `[0, 0, 0]`

  Tres ángulos que de rotaciones que serán realizadas en el objeto, alrededor de los tres ejes.ángulos puede ser una lista con tres números reales o tres números separados por comas. Ejemplo: `[0, 0, 90]` rota el eje x del objeto hasta el eje y del sistema de referencia.

Opción de objeto: origin [origin, punto]

  Valor predefinido: `[0, 0, 0]`

  Coordenadas del origen del objeto, en relación al cual las otras dimensiones serán definidas. punto pueden ser tres números separados por comas, o una lista de tres números.

Opción de objeto: phiresolution [phiresolution, num]

  Valor predefinido: ``

  Número de sub-intervalos en que se divide el intervalo de valores del ángulo phi, que comienza en `startphi` y termina en `endphi`. num debe ser un número entero positivo.

  Consulte también `startphi` y `endphi`.

Opción de objeto: points [points]

  Esta opción hace que en vez de que se muestre la superficie, se muestren únicamente los vértices en la triangulación usada para construir la superficie. Ejemplo: `[sphere, [points]]`

  Consulte también `surface` y `wireframe`.

Opción de objeto: pointsize [pointsize, valor]

  Valor predefinido: `1`

  Tamaño de los puntos, cuando se usa la opción `points`. valor debe ser un número positivo.

Opción de objeto: position [position, punto]

  Valor predefinido: `[0, 0, 0]`

  Coordenadas de la posición del objeto. punto puede ser tres números separados por comas o una lista de tres números.

Opción de objeto: radius [radius, valor]

  Valor predefinido: `0.5`

  El radio de una esfera o la distancia desde el eje hasta los vértices de la base en cilindros o conos. valor debe ser un número positivo.

Opción de objeto: resolution [resolution, número]

  Valor predefinido: `6`

  número debe ser un número entero mayor que 2, que define el número de aristas de la base en objetos de clase “cone” o “cylinder”.

Opción de objeto: scale [scale, factores]

  Valor predefinido: `[1, 1, 1]`

  Tres factores de escala en que serán deformadas las dimensiones del objeto en relación a los tres ejes. factors pueden ser tres número separados por comas o una lista con tres números. Ejemplo: `[2, 0.5, 1]` estira el objeto suplicando sus dimensiones paralelas la eje x, reduce a mitad las dimensiones paralelas al eje y, dejando iguales las dimensiones paralelas al eje z.

Opción de objeto: startphi [startphi, ángulo]

  Valor predefinido: `0`

  En una esfera, phi es el ángulo en el plano vertical que pasa por el eje z, medido a partir de la parte positiva del eje z. ángulo debe ser un múmero entre 0 y 180 que determina el valor inicial de phi desde donde se mostrará la superficie. Valores superiores a 0 eliminan una parte de la superficie.

  Consulte también `endphi` y `phiresolution`.

Opción de objeto: starttheta [starttheta, ángulo]

  Valor predefinido: `0`

  En una esfera, theta es el ángulo en el plano horizontal (longitud), medido desde la parte positiva del eje x. ángulo debe ser un número entre 0 y 360 que determina el valor inicial donde la superficie comienza. Valores mayores que 0 hacen que se elimine una parte de la superficie de la esfera.

  Consulte también `endtheta` y `thetaresolution`.

Opción de objeto: surface [surface]

  Hace que se muestre la superficie del objeto y no los las líneas ni los vértices de la triangulación usada para construirlo. Ese es el comportamiento habitual que se puede alterar con las opciones `points` o `wireframe`.

Opción de objeto: thetaresolution [thetaresolution, num]

  Valor predefinido: ``

  Número de sub-intervalos en que se divide el intervalo de valores del ángulo theta, que comienza en `starttheta` y termina en `endtheta`. num debe ser un número entero positivo. Consulte también `starttheta` y `endtheta`.

Opción de objeto: track [track, posiciones]

  posiciones deberá ser una lista de puntos. Cuando se oprime el botón de “play”, la posición del objeto tomara secuencialmente los valores en la lista, a intervalos regulares de tiempo definidos por la opción `tstep`, dejando un rastro de la trayectoria del objeto. El botón de volver al comienzo puede usarse para recomenzar desde el principio de la lista, haciendo que la animación comience nuevamente cuando se presione otra vez el botón de play.

  Ejemplo. Estos comandos muestran la trayectoria de una bola lanzada con velocidad inicial de 5 m/s, a un ángulo de 45 grados, cuando se puede ignorar la resistencia del aire:

      (%i1) p: makelist ([0,4*t,4*t- 9.8*t^2/2], t, 0, 0.82, 0.01)$

      (%i2) bola: [sphere, [radius,0.1], [color,red], [track,p]]$

      (%i3) piso: [cube, [xlength,2], [ylength,4], [zlength,0.2],
            [position,0,1.5,-0.2],[color,green]]$

      (%i4) scene (bola, piso)$

  Consulte también `animation`.

Opción de objeto: xlength [xlength, altura]

  Valor predefinido: `1`

  Altura de un objeto de clase “cube”, en la dirección x. altura debe ser un número positivo. Consulte también `ylength` y `zlength`.

Opción de objeto: ylength [ylength, altura]

  Valor predefinido: `1`

  Altura de un objeto de clase “cube”, en la dirección y. altura debe ser un número positivo. Consulte también `xlength` y `zlength`.

Opción de objeto: zlength [zlength, altura]

  Valor predefinido: `1`

  Altura de un objeto de clase “cube”, en la dirección z. altura debe ser un número positivo. Consulte también `xlength` y `ylength`.

Opción de objeto: wireframe [wireframe]

  Esta opción hace que en vez de que se muestre la superficie, se muestren únicamente las aristas de la triangulación usada para construir la superficie. Ejemplo: `[cube, [wireframe]]`

  Consulte también `surface` y `points`.

Anterior: Análisis gráfico de sistemas dinámicos discretos, Subir: dynamics [Índice general][Índice]