Cómo crear una cuadrícula 2D no cuadrada con topología esférica.

Al programar el Juego de la vida de Conway en mi computadora . Surge un problema; ¿Cómo lidiar con los bordes en el tablero? ¿Las celdas en el borde tienen que tener en cuenta menos vecinos que las celdas en el interior del tablero? Eso crea efectos no deseados en el borde del tablero (como si las reglas del juego cambiaran allí). Otra posibilidad es hacer un tablero infinito, pero programar esto parece complicado en muchos sentidos.

¿La solución? Pegar los lados opuestos del tablero para que las cosas parezcan teletransportarse al otro lado cuando se enfrentan al problema de interactuar con un borde (un enfoque típico para muchos juegos similares). Esto es topológicamente equivalente a un toro, según tengo entendido. cuyo polígono fundamental es

Polígono fundamental de un toro

Luego jugué un poco con diferentes topologías. He podido crear el Juego de la Vida de Conway con la topología de la Botella de Klein y luego con la topología del plano Proyectivo Real . Pero hay una topología final que quiero examinar y es la Esfera. Sorprendentemente, la Esfera se está volviendo cada vez más difícil de comprender, así que les pido ayuda.

De acuerdo con el polígono fundamental de una esfera, debo pegar la parte superior del tablero con el lado izquierdo y la parte inferior con el lado derecho.

Polígono fundamental de una esfera

Pero quiero que mi tablero en Game of Life no sea cuadrado(la cuadrícula de celdas que no tiene el mismo número de filas y columnas). Esto no fue un problema en las otras topologías porque estaba pegando lados con la misma longitud, pero ahora las cosas son más complicadas. Una solución sería estirar/contraer uno de los lados para acomodar el otro antes de pegarlos. Pero, ¿cómo podría hacer eso con una subdivisión discreta del espacio (como en un tablero de celdas)? Si hago una celda más grande o más pequeña, ¿cómo defino ahora a sus vecinos? Podría crear/destruir algunas celdas para que el número de celdas en un lado coincidiera con el otro que tengo que pegar, pero luego habría celdas sin ningún papel en el juego o celdas que interactúan mucho con los vecinos, y qué reglas Qué implemento para esa decisión exactamente? Así que estoy atrapado aquí, quiero ver un planeadormoverse por el tablero regularmente sin ser destruido o transformado solo en los bordes porque no implementé una topología de esfera correctamente, sin imponer una cuadrícula en particular. ¿Qué tengo que hacer?

Respuestas (3)

Si está tratando de mapear un autómata celular definido en una red plana regular en una esfera, siempre tendrá algunos puntos "defectuosos" donde la red se ve localmente diferente de alguna manera, por ejemplo, por una celda que tiene un número anormal de vecinos o por los barrios superpuestos de forma inusual. Matemáticamente, esto se debe a que el defecto angular total de una esfera (o cualquier poliedro convexo) es 2 círculos completos (es decir, 4 π radianes o 720°), mientras que la de un toro o un plano infinito es cero.

Para una red rectangular de 8 vecinos, como en el juego de la vida de Conway, probablemente lo mejor que puedes hacer es tomar seis cuadrículas y construir un cubo con ellas (que luego puedes estirar en una esfera geométrica si quieres). Esto te dará ocho defectos en las ocho esquinas del cubo. Dependiendo de cómo conecte las rejillas en sus bordes, esos defectos pueden ser (al menos) de dos tipos:

  • Si la esquina está en el medio de una celda, entonces esa celda solo tendrá seis vecinos en lugar de los ocho habituales.
  • Si la esquina está entre celdas, entonces en cada esquina tendrá tres celdas cada una con solo siete vecinos en lugar de los ocho habituales.*

De cualquier manera, el tamaño inusual del vecindario en sí mismo no tendrá un efecto importante en el juego de la vida de Conway: cualquier celda con más de tres vecinos vivos morirá de todos modos. Sin embargo, lo que afectará el comportamiento de la CA es la inusual conectividad local de la red cerca de las esquinas. Esto puede permitir que las esquinas admitan patrones estables u oscilantes no estándar que no serían estables en ningún otro lugar de la red, y también puede destruir cualquier planeador u otros patrones de movimiento que golpeen una de las esquinas.

Por ejemplo, un planeador básico en el GoL de Conway viajará en línea recta a lo largo de una diagonal de la red. Pero en una esquina de un cubo, tres diagonales se unen, y no hay forma de que un planeador que llega directamente a la esquina a lo largo de una de esas diagonales continúe recto; tendría que continuar a lo largo de un borde del cubo, pero eso es ¡imposible, ya que esa es una dirección ortogonal en la red!

Además, incluso si ningún planeador golpea directamente la esquina, pueden ocurrir cosas extrañas en su vecindad. Por ejemplo, es posible que dos planeadores que inicialmente se mueven en trayectorias paralelas pasen una esquina en lados opuestos, giren en direcciones opuestas y choquen, algo que nunca podría suceder en un toroide plano o en un plano infinito.

*) Si lo desea, también puede contar constantemente cada una de las tres celdas de las esquinas como su propio vecino diagonal faltante, pero al menos para el GdL de Conway, es probable que sea aún más disruptivo que simplemente dejar a ese vecino sin contar.

Editar: esta respuesta es incorrecta, como se señala en los comentarios. Lo dejo aquí para que otros no cometan el mismo error.

Pregunta muy interesante! Una idea que me viene a la mente sería tener dos cuadrículas diferentes de las mismas dimensiones, representando hemisferios, e identificar los bordes de las cuadrículas de manera obvia. Así nos damos cuenta de la esfera como un espacio cociente de dos cuadrados disjuntos, en lugar de un solo polígono.

Obviamente, esto no es lo ideal, ya que ya no se vería como una cuadrícula, pero al menos daría una topología esférica.

No estoy seguro si estoy entendiendo correctamente. ¿No sería eso problemático en los polos?
¿A qué te refieres con los polos?
Es posible que aún no haya entendido cuál es la idea que estás proponiendo. ¿Dos tableros separados, uno para el hemisferio norte y otro para el sur?
@Swike Sí. No estoy seguro de a qué puntos te refieres específicamente cuando dices los polos.
Lo que quiero decir es que no veo cómo tengo que pegar cosas para que cada celda tenga 8 vecinos como siempre. Yo puedo pegar un lado de un tablero al otro lado del otro tablero (el ecuador de la esfera), pero ¿cómo pego el resto? Estoy preguntando sobre los polos porque deberían ser un punto único en una esfera, pero aquí no veo forma de mapear esa ubicación de manera única.
Ah si tienes razón. No lo había pensado correctamente; editaré mi respuesta para decir que está mal.
Ah, está bien: pensé que no lo estaba entendiendo en absoluto. Gracias

Lo que creo que estás buscando es la esfera Hexagonal:

Una buena foto de redblobgames.

Hay una explicación en Red Blob Games sobre este mosaico.

Hay una nota sobre las reglas de los planeadores de Carter Bays: A Note on the Game of Life in Hexagonal and Pentagonal Tessellations en el sitio de Wolfram.

Lo que sugiero que debe hacer primero, es hacer una 2 Versión D en una cuadrícula hexagonal y hacer que la envoltura funcione. No tienes que preocuparte por 3 D, ya que esta cuadrícula será como un "mapa de textura" proyectado en una esfera de árbol en el 3 espacio D. Por ejemplo, todos los puntos del hexágono se pueden proyectar sobre la esfera.

Esto es muy interesante como solución pero no quiero cambiar las reglas del juego cambiando el tablero de una cuadrícula rectangular a una hexagonal y modificando los condicionales para los vecinos.
De acuerdo. Pensé que querías que el tablero no fuera cuadrado.
Quiero que el tablero no sea cuadrado, pero no quiero que las celdas del tablero no sean cuadradas.