Una web de Javier Marco Rubio |
CONTACTO | |||
QUEST 3D:AUTOMATAS CELULARES
Es duro admitirlo, pero uno ya tiene una edad, y más en el tema informático, en el que he vivido sus albores. Uno de los primeros programas en BASIC que escribí siendo aun niño, fue el autómata celular de Conway: Consulten la Wikipedia para saber qué es un automata celular Me gustan los automátas celulares por la complejidad que pueden alcanzar sus diseños a partir de una reglas de evolución muy sencillas. Pero aun me gustan más, porque no hay grupos de investigadores universitarios que pretendan buscar aplicaciones reales a los autómatas celulares, como controlar los semafores de una ciudad, el pilóto automático de un avión, o una cadena de montaje de autómoviles, cosa que sí se pretenden con otros modelos como las redes neuronales, los algoritmos genetícos... Lo bueno de los autómatas celulares es que simplemente son "bonitos" En concreto, el juego de la vida de Comway es el más conocido, por ser el que reglas más simples aplica, consiguiendo interesantes diseños evolutivos.
Visiten esta web para jugar con un Conway's Game of Life hecho en Java En aquellos tiempos remotos, yo saqué el listado del algoritmo de Conway's Game of Life, de un libro incunable, uno de los primeros libros de juegos de ordenador de la historia, que me enorgullezco de conservar: Basic Computer Games -microcomputer edition- Workman Publishing 1979 Me voy a tomar la atrevida licencia de publicar dos páginas de este libro. Aquellas en las que está la historia, y el listado Basic original del Conway's Game of Life. Pienso que si alguna web la informática se considera un arte, materiales como este serán los primeros en ocupar los museos: Como ven, las reglas son muy simples: Se considera vecino de una celda aquellos que la rodean incluso en diagonal. Si ven el algoritmo original, se implementa mediante un array bidimensional de dimensiones finitas (seria limitación), y hace uso intensivo de los bucles para recorrer las dos dimensiones del array comprobando los vecinos de cada celda. Recuerdo mi primera implementación del algoritmo, un micro ordenador de 8 bits fabricado por Thomson: MO5. Si hay curiosidad, pueden saber de qué iba este ordenador, y ver los juegos que realicé en aquellos tiempos para este ordenador en esta web. ¡Qué diferencia ahora!, se generan cientos de generaciones en segundos. Pero en determinados lenguajes realmente hemos dado un paso atras: los lenguajes interpretados. Quest 3D, es un lenguaje interpretado, por tanto, el uso intensivo de bucles ralentiza mucho la ejecución. además carece de la estructura de array bidimensional, por lo que hay que cambiar mucho la estructura del algoritmo orginal de Comway. Voy a desmenuzar paso a paso la implementación de un algoritmo de Conway en Quest3D. Como ejercicio de lógica en Quest3D a los que esteis aprendiendo puede resultaros interesante: LIFE en QUEST3DDESCARGAR EL MATERIAL (fuente y ejecutable)1-TABLAS Se necesitan dos tablas, la que contiene el estado evolutivo actual (life), y otra temporal para el calculo de la siguiente iteración (temporal)
Las columnas celda son de tipo vector, se inicializa a mano la de la tabla life rellenando las X e Y de las casillas ocupadas en el patrón inicial. (la Z a cero para implementar en el futuro un life en tres dimensiones. La columna vecinos de life se calculará en el algoritmo, no hace falta rellenarlo. contendrá en todo momento cuantos vecinos tiene cada celda ocupada. Como ven, al no implementarlo mediante array, no hay dimensiones finitas. El patrón puede crecer (teoricamente) hasta el infinito. 2-INICIALIZACIÓN DE TABLAS
Al comienzo del algoritmo, con un "one-time" se inicializan las tablas, y se rellena la tabla life, con las celdas ocupadas del patrón inicial que se desea evolucione. Finalmente se rellena una variable TOTAL, que contendrá en todo momento el numero de celdas ocupadas del patrón evolutivo. 3-CALCULO DE VECINOS Este es el primer paso de la iteración, necesario para saber quien muere de soledad o saturación. El algoritmo en lenguaje fácil sería:
con esto, la columna vecinos queda rellenada con el numero de vecinos de cada celda ocupada.
4-CALCULO DE SUPERVIVIENTES Una vez que tenemos los vecinos, podemos saber quién sobrevive a la siguiente iteración. Estos los psaremos a la tabla temporal.
5- NACIMIENTOS La fase más compleja y que más calculo absorve. Primero encuadramos el patrón, sacando sus coordenadas máximas y minimas. Ampliando en uno este cuadrado, comprobaremos todas las celdas vacias, contando sus vecinos ocupados. Aquellos que tengan tres vecinos, pasaran a la tabla temporal como nueva celda ocupada.
En Quest la imagen es un poco grande:
6-FINALIZAR LA ITERACION Finalmente, en temporal está ya completa la nueva iteración. Simplemente se traspasan los datos de temporal a life:
7-RENDER Es un render normal, con cajas renderizandose en un bucle for-loop, sacando las coordenadas de posición del array life:
Y ya está, la iteración , provoca la vida!
Autor: Javier Marco
|
||||||||||||
|
|
||||||||||||
Hagaloustedmismo Contacte en : hagaloustedmismo@wanadoo.es Phohibida toda reproducción total o parcial sin permiso del autor |