Cómo dibujar un hecatonicosacoron

Piste rouge Le 24 mai 2012  - Ecrit par  Jos Leys
Le 24 mai 2012  - Traduit par  Edgard Araya, Andrés Navas, Pilar Garcés
Article original : Comment dessiner un hécatonicosachore Voir les commentaires
Lire l'article en  

El hecatonicosacoron es un poliedro regular del espacio de dimensión 4, más conocido como hiperdodecaedro o, simplemente, como 120-cell. Posee 600 vértices, 1200 aristas y 120 células que son dodecahedros [1]. ¡Los poliedros del espacio de cuatro dimensiones son bastante mas complicados que sus colegas de la dimensión tres ! Se requiere por tanto de una lista bien larga de datos para dibujarlos : además de las coordenadas de los 600 vértices, se necesita saber qué parejas conectar de modo de trazar las aristas.

Describiremos aquí un método [2] que no necesita de todos estos datos : basta con conocer las simetrías del objeto. El mismo método permite dibujar todos los poliedros regulares de dimensión 4. Nos encontraremos así con el pentácoron o 4-simplejo, el teseracto, octágono o hipercubo, el hexadecacoron o 16-cell, el icositetracoron o 24-cell y el hexacosicoron o 600-cell. En el camino hallaremos también algunos poliedros irregulares...

Las herramientas de las que nos serviremos son la proyección estereográfica y la técnica de lanzamiento de rayos.

Proyección estereográfica

Una imagen tiene dos dimensiones y el objeto que nos interesa tiene cuatro. Por ello, para obtener una imagen del objeto es necesario reducir el número de dimensiones mediante proyecciones. Podemos pasar de cuatro a tres dimensiones mediante una proyección ortogonal : es decir, tomando una de las cuatro coordenadas como constante. Pero para apreciar mejor la geometría de los poliedros en cuatro dimensiones, podemos elegir la proyección estereográfica, pues así se muestra mucho mejor [3].

La figura de la izquierda muestra la proyección estereográfica en tres dimensiones : un punto sobre la esfera de dimensión 2, $S^2$, se proyecta desde el Polo Norte sobre un plano tangente al Polo Sur. Podemos tomar cualquier plano paralelo al que no pasa por el Polo Norte, como por ejemplo el plano ecuatorial que pasa por el centro de la esfera.
En este caso, un punto de la esfera cuyas coordenadas son $(x,y,z)$ se proyecta hacia un punto del plano cuyas coordenadas serán $(\frac{x}{1-z,},\frac{y}{1-z})$.

Lo mismo ocurre con la esfera de dimensión 3, $S^3$, de ecuación $x^2+y^2+z^2+w^2=1$. Un punto de esta esfera se proyecta en el ’’espacio ecuatorial 3D’’ en el punto $(\frac{x}{1-w,},\frac{y}{1-w},\frac{z}{1-w})$ [4].

Otra proyección de 3 dimensiones a 2 dimensiones se realiza mediante trazado de rayos.

Trazado de rayos

Elegimos una posición de una cámara virtual, una dirección de vista y un plano que es perpendicular a esa dirección. Proyectaremos todo lo que está en líneas o, mejor dicho, rayos, entre la cámara y cada pixel de un rectángulo que está en ese plano y que está centrado en la intersección de la línea de dirección con el plano. Lo que resta hacer es determinar el color de ese pixel. Suponga que hay un objeto entre la cámara y ese rectángulo. Para algunos objetos, se puede determinar analíticamente el punto de intersección entre una línea a un pixel y el objeto. El pixel tomará el color del objeto, corregido por la posición de una fuente luminosa virtual.

Si la determinación del punto de intersección es imposible (como en el caso de los objetos fractales 3D [5]), o difíciles (como ciertos objetos complicados...), buscamos una función que proporcione la distancia, o una estimación de la distancia, entre un punto de un rayo y el objeto en cuestión. Luego podemos avanzar este punto en el radio mediante pasos que sean menores o iguales que esa estimación de la distancia, y detenernos cuando esta estimación sea menor que un número pequeño. En la figura de la izquierda, la distancia entre el punto $P$ y el objeto está indicada con las esferas con las posiciones sucesivas de $P$ como centro. En el caso de la figura, se trata de una estimación conservadora y, por tanto, más pequeña que la distancia real.

Si un rayo no se encuentra con el objeto, a ese pixel le asignamos el color de fondo de la imagen.

Un caleidoscopio en un poliedro 3D

Es posible recubrir una esfera con triángulos esféricos de ángulos $\pi/2$, $\pi/3$ y $\pi/4$. Si tomamos uno de esos triángulos y tomamos iterativamente los puntos simétricos del punto azul de la figura de la izquierda, con respecto a los tres planos que pasan por los lados del triángulos y el centro de la esfera, se obtienen los seis vértices de un octaedro.

Si hacemos lo mismo con el punto azul de la figura de la derecha, obtendremos los ocho vértices de un cubo.

Si imaginamos los tres planos como espejos, se obtiene un caleidoscopio... que por lo tanto tiene espejos alrededor del triángulo verde, al que llamamos el triángulo fundamental.

También hay una construcción similar para el tetraedro tomando un triángulo esférico de ángulos $\pi/2$, $\pi/3$ y $\pi/3$.

También podemos recubrir una esfera con triángulos esféricos de ángulos $\pi/2$, $\pi/3$ y $\pi/5$. Con este mosaico podemos construir los vértices del dodecaedro y del icosaedro, como se muestra en las figuras de la izquierda y de la derecha.
Si elegimos la posición del punto en otro lugar sobre los lados del triángulo, podemos obtener los vértices de los sólidos de Arquímedes, como el balón de fútbol ( icosaedro truncado) de la izquierda y del pequeño rombicosidodecaedro de la derecha.

Todo esto nos ofrece un método para dibujar todos estos poliedros.

Elegimos el triángulo esférico a utilizar (de ángulos $\pi/2$ y $\pi/3$, y cuyo tercer ángulo sea $\pi/3$, $\pi/4$ o $\pi/5$), que da los tres planos por los tres lados. También elegimos un punto en el triángulo que se convertirá en un vértice del poliedro.

Tomamos un punto en un radio. En este punto, se realizan una serie de reflexiones de los tres planos, hasta que el punto transformado se ubique en la zona piramidal entre los tres planos.

Ahora calculamos la distancia de este punto a un vértice, una arista y una cara (y le damos un cierto espesor a las aristas y los vértices). Luego podemos avanzar el punto original en el radio de la más pequeña de las tres distancias, para obtener un dibujo como el de la figura de la derecha.

¿Cómo hacer esto en detalle ?

Tenemos un punto $\vec P$ cuyas coordenadas son $(x,y,z)$ sobre el radio. Identificamos los tres planos por sus normales $\vec N_1,\vec N_2$ y $\vec N_3$, dirigidos hacia el interior del triángulo. Calculamos el producto escalar $a=\vec P \cdot \vec N_i$ para las tres normales. Si $a$ es negativo, transformamos $\vec P$ en $\vec P'=\vec P-2a\vec N_i$, y repetimos hasta que $a$ sea positivo para las tres normales.

Buscamos primero los tres vértices del triángulo esférico. Se determinan los productos vectoriales : $\vec S_1=\vec N_2\times\vec N_3$, $\vec S_2=\vec N_3\times\vec N_1$, $\vec S_3=\vec N_1\times\vec N_2$, para luego darnos tres parámetros $u, v, w$ tales que $u+v+w=1$ y definimos el punto $\vec S'=u\vec S_1+v\vec S_2+w\vec S_3$, que normalizamos a $\vec S=\vec S'/|S'|$.

$S$ será el vértice del poliedro, mientras que las tres aristas de $S$ son segmentos que parten de $S$ según los tres vectores $N_i$. Las tres caras en el vértice $S$ son planos por $\vec S$, perpendiculares a los vectores $\vec S_i$.

Tenemos el punto $\vec P'$ que está ’’al interior’’ de los tres planos con normales $N_i$.

La distancia hasta el vértice es $d_s=|\vec P'-\vec S|$. Si queremos mostrar los vértices como pequeñas esferas de radio $R_s$, calculamos $d_s=|\vec P'-\vec S|-R_s$

Para las distancias a las aristas, primero tomamos la proyección ortogonal de $\vec P'$ en una línea por $\vec S$ según una normal $\vec N_i$. Con ello, $\vec M_i=\vec P'-(\vec P' \cdot \vec N_i)\vec N_i$. Siempre que el producto escalar $\vec P' \cdot \vec N_i$ sea positivo, la distancia a cada arista será $d_{ai}=|\vec P'-\vec M_i|$. Elegimos la más pequeña de las tres. Si queremos mostrar las aristas como cilindros con radio $R_a$, calculamos $d_{ai}=|\vec P'-\vec M_i|-R_a$.

Para las distancias a las caras, primero calculamos los tres productos escalares $a_i=\vec S \cdot \vec S_i$. Las distancias a las caras son $d_{fi} =\vec P' \cdot \vec S_i-a_i$ y nos quedamos con la más grande.

Tomamos el valor más pequeño entre las distancias $d_s$, $d_a$ y $d_f$, y podemos avanzar el punto $P$ en el radio con esta distancia. Nos detenemos cuando la distancia es menor que un número pequeño a escoger, o si el punto $P$ se aleja demasiado sobre el radio, lo que implica que este radio no se intersecta con el poliedro. Para determinar la normal a la superficie, dibujamos al menos dos rayos muy cerca del rayo original para encontrar otros dos puntos de intersección. Obtenemos la normal del producto vectorial de estos tres puntos.

Por tanto, se trata de un método para dibujar poliedros que no requiere que conozcamos las coordenadas de los vértices, ni los pares de vértices a unir para obtener las aristas. Todo lo que se necesita es saber cuál triángulo esférico elegir y qué punto de ese triángulo servirá como vértice.

¡Las simetrías de los poliedros contienen todo lo necesario ! Las reflexiones generadas por tres planos bien escogidos permiten obtener todos los poliedros. Estas reflexiones forman un grupo de Coxeter.

Intentaremos hacer algo similar para los poliedros del espacio de dimensión 4.

Un caleidoscopio en cuatro dimensiones

Ahora debemos ocuparnos de la esfera de tres dimensiones $S^3$. En lugar del triángulo esférico fundamental, ahora tendremos un tetraedro fundamental cuyos cuatro vértices están en la esfera. ¡En lugar de tres planos de simetría, ahora tendremos cuatro !

El triángulo fundamental sobre la esfera $S^2$ tenía por ángulos a $\pi/2$, $\pi/3$ y $\pi/n$, con $n$ igual a 3, 4 o 5. Para el poliedro en la dimensión 4, los ángulos entre los planos del tetraedro deben ser $\pi/2$, $\pi/3$, $\pi/3$ y $\pi/n$, nuevamente con $n$ igual a 3, 4 o 5.

Para construir tal tetraedro, determinamos las normales en los cuatro planos basados en los ángulos entre esos planos. Los vértices del tetraedro se calculan mediante los productos vectoriales entre esas normales. No debemos olvidar que estamos en la dimensión 4, ¡por lo que los ’’productos vectoriales’’ requieren tres vectores !

El tetraedro fundamental en detalle

Lo primero que hay que hacer es determinar los cuatro planos $a, b, c, d$ que serán las caras de este poliedro fundamental. Para los ángulos, sabemos que $\widehat {ab}=pi/2$, $\widehat {ac}=pi/n$, $\widehat {ad}=pi/2$, $\widehat {bc}=pi/3$, $\widehat {bd}=pi/3$, $\widehat {cd}=pi/2$. Escoja $\vec N_a=(1,0,0,0)$ y $\vec N_b=(0,1,0,0)$ como normales sobre $a$ y $b$.

Como $\widehat {ac}=pi/n$ y $\widehat {bc}=pi/3$, entonces $\vec N_c=(-\cos(\pi/n),-1/2,N_cz,N_cw)$.

De $\widehat {ad}=pi/2$ y $\widehat {bd}=pi/3$ se obtiene $\vec N_d=(0,-1/2,N_dz,N_dw)$.

Nos queda la condición $\widehat {cd}=pi/2$, y es evidente que los vectores deben ser unitarios. Luego, podemos escoger una de las incógnitas como queramos. Tomando $N_dw=0$, se sigue que $\vec N_c=(-cos(pi/n),-1/2,-1/2\sqrt{3},\sqrt{2/3-\cos(\pi/n)^2})$ y $\vec N_d=(0,-1/2,\sqrt{3}/2,0)$.

Los vértices del tetraedro están dados por los productos vectoriales : $\vec S_a=\vec N_b \times \vec N_c \times \vec N_d$, $\vec S_b=\vec N_c \times \vec N_d \times \vec N_a$, $\vec S_c=\vec N_d \times \vec N_a \times \vec N_b$, $\vec S_d=\vec N_a \times \vec N_b \times \vec N_c$.

Para obtener más información sobre el producto vectorial de cuatro dimensiones, consulte este enlace (en inglés).

Vamos a dibujar la proyección estereográfica de un poliedro 4D, y dibujaremos rayos hacia esa proyección. En esta ocasión, solamente dibujaremos los vértices y las aristas, pues si dibujamos también las caras, ocultaremos una buena parte de la geometría del objeto.

Tomamos un rayo y avanzamos un punto $P$ a partir de la cámara. Para calcular la distancia del punto a los vértices y las aristas, tendremos que movernos en el espacio de dimensión 4 : calculamos la posición de la proyección estereográfica inversa del punto $P$, que entrega un punto $P'$ en $S^3$.

Lo primero que se debe hacer entonces es encender el caleidoscopio : transformar el punto mediante reflexiones de los cuatro planos , hasta que el punto esté ’’al interior’’ del tetraedro fundamental.

Elegimos un punto $S$ dentro del tetraedro que será un vértice del poliedro que queremos dibujar, y determinaremos la distancia entre el punto $P'$, transformado por las reflexiones, y este punto $S$, además de la distancia desde $P'$ hacia las aristas que parten de $S$.

¿Cómo hacer esto en detalle ?

Tenemos un punto $\vec P$ cuyas coordenadas son $(x,y,z)$ sobre el radio. El punto correspondiente en $S^3$ será $P' (\frac{2x'}{1+R^2,},\frac{2y'}{1+R^2},\frac{2z'}{1+R^2},\frac{1-R^2}{1+R^2})$, con $R^2=x'^2+y'^2+z'^2$.

Calculamos el producto escalar $a=\vec P \cdot \vec N_i$ para las cuatro normales. Si $a$ es negativo, transformamos $\vec P$ en $\vec P'=\vec P-2a\vec N_i$, y repetimos hasta que $a$ sea positivo para las cuatro normales.

Nos damos cuatro parámetros $u, v, m, t$ tales que $u+v+m+t=1$ y definimos el punto $\vec S'=u\vec S_1+v\vec S_2+m\vec S_3+t\vec S_4$, donde $S_i$ representa cada uno de los cuatro vértices del tetraedro fundamental. Normalizamos $\vec S$ como $\vec S=\vec S'/|S'|$.

Tenemos el punto $\vec P'$ que se encuentra ’’al interior’’ de los cuatro planos con normales $N_i$.

La distancia al vértice es $d_s=\arccos{(\vec P' \cdot \vec S)}-R_s$, con $R_s$ el radio de una pequeña esfera que representa los vértices, expresado en radianes.

Para las distancia a las aristas, tomamos primero la proyección ortogonal de $\vec P'$ sobre un plano determinado por $\vec S$ y una normal $\vec N_i$.

Para encontrar el punto $\vec A$, primero calculamos $s=\vec P' \cdot \vec S$, $n=\vec P' \cdot \vec N_i$, $k=\vec N_i \cdot \vec S$.
Luego, $f=s-kn$, $g=n-ks$. Siempre que $g$ sea negativo, el punto $\vec A$ será $\vec A=f\vec S+g\vec N_i$, al que normalizamos para ponerlo sobre $S^3$. Si $g$ es positivo, ignoramos este punto y pasamos al siguiente $N_i$.

Entonces, la distancia a la arista será $d_{ai}=\arccos{(\vec P' \cdot \vec A)}-R_s$. Nos quedamos con la más pequeña.

Tomamos el valor más pequeño entre $d_s$ y $d_a$, ya que ambos son ángulos.

Expresaremos estas distancias como ángulos. Por ejemplo, la distancia entre $P'$ y $S$ se obtiene del producto escalar entre ambos : $\cos{(d_s)}=\vec P' \cdot \vec S$ [6].

Las aristas se encuentran sobre $S^3$ en planos dados por los vectores $\vec S$ y $\vec N_i$, donde $i=a, b, c, d$. Encontrar la distancia entre el punto $P'$ y las aristas es un poco más complicado, pero obtenemos distancias $d_a$ hacia las aristas, las que consideran un cierto espesor de las aristas.

La distancia que nos interesa es, por tanto, la menor entre las distancias $d_s$ y $d_a$, que llamaremos $d_{min}$. Si avanzamos nuestro punto $P$ sobre nuestro radio en 3D a una distancia $d$, para llegar a un punto $Z$, entonces el ángulo sobre $S^3$ entre los puntos correspondientes $P'$ et $Z'$, debe ser menor o igual que $d_{min}$.

Esto nos da una ecuación cuadrática en $d$ ; de las dos soluciones, nos quedamos con la que es positiva, para no retroceder en nuestro radio. Si la ecuación no tiene soluciones reales, no encontraremos vértices ni aristas, por lo que podemos pasar al siguiente pixel de la imagen.

La figura de la izquierda muestra el análogo en 3D : la proyección inversa de un rayo es un círculo (amarillo) que pasa por el Polo Norte, el centro de la proyección. El círculo verde sobre la esfera muestra una distancia alrededor del punto $P'$, y este círculo intersecta al círculo amarillo en dos puntos, las dos soluciones de la ecuación.

Si el radio pasa por una arista o un vértice, la ecuación nos dará la distancia exacta a recorrer, lo que significa que el algoritmo es muy rápido : no es necesario dar una gran cantidad de pasos para terminar con el cálculo de un radio. Las imágenes que siguen se calcularon en unos segundos [7].

Con la elección que hicimos para las normales en las cuatro caras del tetraedro fundamental, uno de los vértices del tetraedro será $\ vec S_i = (0, 0, 0, 1)$ que es el polo de proyección. La consecuencia es que obtenemos fácilmente poliedros con un vértice o una arista que va al infinito por la proyección estereográfica. La solución es entonces someter el punto $P'$ sobre $S^3$ a rotaciones en cuatro dimensiones para obtener un poliedro bien posicionado en 3D.

Dibujar un hecatonicosacoron

A continuación se muestran algunos resultados. Tomemos primero el tetraedro fundamental donde uno de los ángulos es $\pi/5$, y con el punto $\vec S$ en un vértice bien elegido : obtenemos las 120 células :

El mismo tetraedro, pero con el punto $\vec S$ sobre otro vértice nos entrega las 600 células :

Sin embargo, el mismo tetraedro sobre otro vértice produce un poliedro irregular ; es decir, todas las células no son iguales.

Si elegimos un punto sobre una arista del tetraedro, obtendremos un balón de fútbol 4D :

Con otro punto sobre el borde :

Con un tetraedro donde uno de los ángulos es $\pi/4$, obtenemos entre otros el hipercubo y las 24 células :

Con el mismo método, también podemos dibujar teselaciones de un espacio hiperbólico, como se muestra en la imagen de abajo, realizado en el software Fragmentarium. [8]

Para el espacio hiperbólico hacemos una proyección estereográfica en un hiperboloide de cuatro dimensiones, que vive en un espacio de Minkowski. Es un poco más complicado, pero el mismo método aún tiene éxito en generar imágenes como la que se muestra a continuación. [9]

Post-scriptum :

El equipo editorial de Images des maths y el autor desean agradecer por la cuidadosa revisión, a los correctores cuyos seudónimos son : Serge Cantat, Yannick Danard y gammella.

Article original édité par Aurélien Alvarez

Notes

[1Ver este artículo para otra vista sobre el ’’120’’.

[2Fue Abdelaziz Nait Merzouk (Argelia) quien publicó el código de este método en Fractalforums. Él escribió el código para Fragmentarium, un programa ultra-rápido (¡y gratuito !) de Mikael Hvidtfeldt Christensen, el cual utiliza los procesadores de la carta gráfica.

[3Para una comparación de los dos métodos, ver los capítulos 3 y 4 de la película Dimensiones.

[4La proyección inversa, de un punto 3D $(x',y',z')$ hacia un punto de $S^3$ está dada por $(\frac{2x'}{1+R^2,},\frac{2y'}{1+R^2},\frac{2z'}{1+R^2},\frac{1-R^2}{1+R^2})$, avec $R^2=x'^2+y'^2+z'^2$.

[5Para el trazado de rayos en objetos fractales, también podemos ver este artículo.

[6Como queremos mostrar los vértices como pequeñas esferas de radio $R_s$, calcularemos la distancia $d_s=\arccos{(\vec P' \cdot \vec S)}-R_s$.

[7En una computadora de 4 núcleos con el algoritmo realizado en Ultrafractal.

[8Con el código de Knighty, alias Abdelaziz Nait Merzouk.

[9Hecho en Ultrafractal.

Partager cet article

Pour citer cet article :

Andrés Navas, Edgard Araya, Pilar Garcés — «Cómo dibujar un hecatonicosacoron» — Images des Mathématiques, CNRS, 2012

Commentaire sur l'article

Laisser un commentaire

Forum sur abonnement

Pour participer à ce forum, vous devez vous enregistrer au préalable. Merci d’indiquer ci-dessous l’identifiant personnel qui vous a été fourni. Si vous n’êtes pas enregistré, vous devez vous inscrire.

Connexions’inscriremot de passe oublié ?