Formas y curvatura: Surface Evolver

Posgrado Oficial Matemáticas - Universidad de Granada

Tutorial 5

Uso de colores en Evolver: la pompa doble

Pompa doble

El fichero bubble2.fe implementa numéricamente el problema matemático de encontrar la forma más eficiente de encerrar dos volúmenes prescritos, entendiendo por eficiente que tenga la menor área posible. Todos hemos hecho alguna vez pompas de jabón, que son esferas perfectas (las estudiamos usando Evolver en el tutorial 2) y a menudo hemos visto configuraciones de dos pompas pegadas entre sí. Estas configuraciones, llamadas pompas dobles, consisten en dos esferas (posiblemente con radios distintos) que comparten una circunferencia común, y la superficie común entre ambas es también esférica (con radio distinto del de las dos esferas que se pegan) o plana. ¿Es ésta la forma más eficiente de encerrar dos volúmenes prescritos?

Si atendemos al principio implícito de que la naturaleza tiende a minimizar costes, deberíamos pensar que la respuesta es sí. Sin embargo, el problema matemático resultante de esta pregunta dista mucho de ser trivial, y fue resulto en 2002 por M. Hutchings, F. Morgan, M. Ritoré y A. Ros (Annals of Mathematics 155 (2002), no. 2, 459-489), confirmando que la naturaleza no se equivoca. Aquí no vamos a discutir el contenido matemático del problema, donde la mayor dificultad radica en descartar cualquier otra configuración viendo que siempre es menos eficiente que la de una pompa doble estándar. Es interesante ver al propio F. Morgan explicando este resultado y otros sobre formas óptimas en naturaleza, en la siguiente entrevista: Video en You Tube

Desde el punto de vista de Evolver, la novedad con este ejemplo de la pompa doble radica en que definiremos dos cuerpos distintos en la superficie inicial, y asignaremos a cada uno un volumen, para minimizar a continuación el área. Además del proceso de minimización en sí, estamos interesados en aprender a usar colores para distinguir partes de un gráfico, y en cómo exportar gráficos obtenidos con Evolver. La configuración inicial consiste en dos cubos de lados unitarios, adosados por una cara común (en el plano $\{y=1\}$).

Pompa doble
// bubble2.fe
// Evolver data for two bubbles of prescribed volume.

vertices
1 0.0 0.0 0.0
2 1.0 0.0 0.0
3 1.0 1.0 0.0
4 0.0 1.0 0.0
5 0.0 0.0 1.0
6 1.0 0.0 1.0
7 1.0 1.0 1.0
8 0.0 1.0 1.0
9 1.0 2.0 0.0
10 0.0 2.0 0.0
11 0.0 2.0 1.0
12 1.0 2.0 1.0

edges /* given by endpoints and attribute */
1 1 2
2 2 3
3 3 4
4 4 1
5 5 6
6 6 7
7 7 8
8 8 5
9 1 5
10 2 6
11 3 7
12 4 8
13 3 9
14 4 10
15 8 11
16 7 12
17 9 10
18 10 11
19 11 12
20 12 9

faces /* given by oriented edge loop */
1 1 10 -5 -9
2 2 11 -6 -10
6 3 12 -7 -11 // interface between bubbles (cara común) 4 4 9 -8 -12 5 5 6 7 8 3 -4 -3 -2 -1 7 13 17 -14 -3 8 13 -20 -16 -11 9 17 18 19 20 10 14 18 -15 -12 11 16 -19 -15 -7 bodies /* one body, defined by its oriented faces */ 1 1 2 3 4 5 6 volume 1 2 -6 -7 8 9 -10 11 volume .5

Notemos que hay dos cuerpos, a los que asignamos volúmenes distintos (aunque geométricamente, ¡los cubos tienen el mismo volumen!). Esto nos dice que los cubos evolucionarán de forma no simétrica. De nuevo la energía a minimizar es el área.

En la ventana de comandos, tecleamos

g 5
set body[1].facet color red Asigna el color rojo al cuerpo nº 1 y a sus caras. set body[2].facet color green Asigna el color verde al cuerpo nº 2 y a sus caras. show facets where color == red Muestra sólo aquellas caras de color rojo. No muestra la cara común (cara 6) porque le ha asignado posteriormente el color verde. show facets where color == green Muestra sólo aquellas caras signa el color verde, entre otras la cara común. show facets Muestra todas las caras de nuevo. r g 10 r g 20

Tengamos en cuenta las siguientes propiedades:

Además de la asignación de colores, el ejemplo anterior muestra dos ejemplos de una sintaxis de tipo SQL (structured query language), que se usa con bases de datos. En general, esta sintaxis consiste en 4 partes:

"acción" + "elemento" + where + "premisa a aplicar al elemento para decidir si aplicar o no la acción"
donde

Puede verse el archivo index.htm (en el paquete de instalación) para más detalles. Por otro lado, los colores disponibles son:

(0) black (1) blue (2) green (3) cyan
(4) red (5) magenta (6) brown (7) lightgray
(8) darkgray (9) lightblue (10) lightgreen (11) lightcyan
(12) lightred (13) lightmagenta (14) yellow (15) white

Podemos especificar el color "transparente" para una cara, con el comando clear. Muchas veces es útil asignar colores diferentes a los dos "lados" de una superficie. Esto se hace al definir cada cara, mediante el atributo frontcolor [nombre del color] y/o backcolor [nombre del color], por ejemplo

faces
1 1 2 3 4 5 frontcolor lightgreen backcolor yellow

Existe una versión simplificada de la sintaxis SQL anterior, donde se omite "where". En este caso, se aplicará la acción al elemento especificado por la numeración correspondiente. Por ejemplo,

show facet 1

Exportando gráficos con Evolver

Al principio de este tema hemos visto dos ficheros gráficos sobre la pompa doble, uno en color y otro en blanco y negro. Ambos han sido creados con Evolver. El primero de ellos se obtuvo simplemente capturando pantalla a partir de la pantalla gráfica de Evolver con una configuración suficientemente iterada y refinada a partir de la configuración inicial anterior, con lo que se obtiene un resultado algo burdo pero muy sencillo de realizar. Al final de este tutorial veremos cómo obtener gráficos más elaborados a partir de Evolver, vía otros programas. El segundo fichero gráfico de arriba, que muestra la configuración inicial de bubble2.fe, se hizo exportando los datos de la triangulación inicial con Evolver. Esto último tiene la limitación de que Evolver sólo exporta gráficos a una cantidad muy limitada de formatos, entre ellos postscript.

Para exportar gráficos con Evolver, salimos del modo gráfico (q) y tecleamos

P

De esta forma estamos ordenando exportar la vista actual de la configuración (con la misma perspectiva que aparece en la ventana gráfica, por lo que es aconsejable moverla con el ratón hasta encontrar la perspectiva ideal, para luego exportarla). Evolver nos responde con los distintos formatos gráficos en los que puede exportar una triangulación. Estas opciones son:

  1. Pixar. Produce ficheros con la extensión quad (de "quadrilateral").
  2. OOGL. Produce ficheros con la extension quad. Esta opción y la anterior son válidas para abrir posteriormente con el programa 3D GeomView (ver página oficial), pero este último programa corre bajo Unix y Linux, y no bajo Windows.
  3. Postscript. Produce ficheros ps, que pueden editarse, por ejemplo, con CorelDraw. Es útil para generar gráficos de configuraciones iniciales, ya que permite etiquetar los vértices, aristas, etc. automáticamente.
  4. Triangle. Produce ficheros sin extensión.
  5. Softimage. Produce ficheros con la extensión mdl.
  6. OFF. Produce ficheros ASCII (sin extensión).

Nosotros elegiremos la opción 3 (postscript), para poder editar después el fichero de salida. Después, Evolver nos pregunta por varias opciones para conformar el fichero gráfico. Normalmente se contesta "yes" (y) o "no" (n), salvo cuando el programa muestra las posibles respuestas. En este caso, hemos elegido:

Si creamos un fichero postscript de una superficie que haya sido refinada muchas veces, el número de lados y caras será extremadamente grande, lo que hace que el fichero ps sea también muy grande. Sin embargo, puede reducirse considerablemente el tamaño de salida si decimos a Evolver que no dibuje aquellos elementos que por la perspectiva, están escondidos tras otros. Esto se hace con el comando visibility_test on.

Creación de ficheros vrml y obj a partir de gráficos producidos con Evolver.

Si deseamos crear un gráfico más sofisticado a partir de una configuración producida con Evolver, podemos usar otros programas más específicos para moverlos en tiempo real, proyectar texturas o luces, crear efectos visuales 3D y otras muchas cosas. Existen muchos programas 3D (Blender como opción libre, Bryce o 3DStudio Max como ejemplos de software propietario, etc), y a menudo éstos trabajan con formatos 3D específicos, que también son muy numerosos. Dos de los formatos 3D más usados son vrml y obf. El primero es un estándar para producir gráficos incrustados en páginas web que se pueden mover en tiempo real, y es legible con muchos visores vrml como Cortona (éste es sólo un visor) o CrtlView (que además de ser visor, permite convertir a otros formatos 3D). El formato obj es legible con programas como Bryce (para producir gráficos 3D con texturas, luces y colores, ver http://www.daz3d.com/program/bryce/ ) o CtrlView. Una utilidad posible del formato obj mediante Bryce es, por ejemplo, producir gráficos sofisticados de gran calidad para cartelería, ilustraciones, etc.

Imagen con Bryce

Supongamos que tenemos un fichero .fe que queremos evolucionar y a partir de él, obtener un fichero vrml u obj. Una vez evolucionada la configuración inicial con Evolver hasta un punto del que queramos guardar una versión gráfica, teclear (en la ventana de comandos)

read "vrml.cmd"

Con eso se carga el comando vrml de Evolver, que crea un fichero vrml (de forma parecida a como cuando queremos cargar un package con Mathematica). Si Evolver devuelve un mensaje de error al comando anterior, suele ser porque no puede encontrar el archivo vrml.cmd que le estamos pidiendo que cargue. Podemos solucionar este problema de dos formas: o bien copiamos el fichero vrml.cmd en el directorio actual de trabajo (se encuentra por defecto en Evolver\fe\ ), o bien tecleamos entre comillas en la sintaxis anterior la ruta completa de nuestro ordenador en la que está el fichero necesario.

Para que ejecutar el comando desde Evolver, teclear en la ventana de comandos

vrml | "nombre.wrl"

con lo cual se creará un fichero con extensión wrl, llamado nombre, en el mismo directorio donde estaba el fichero .fe. Este fichero es ya una versión 3D de nuestra configuración evolucionada, en formato vrml. Con el programa CtrlView podremos abrir el fichero wrl, y salvarlo como fichero obj. A su vez, el fichero obj puede ser importado desde Bryce.

Joaquín Pérez © 2011
Inicio  |   Arriba