Automatas Celulares


Este es un ejemplo creado por Simón Poblete. Simula la evolución temporal de autómatas celulares.



Imagen creada con la regla 0 1 0 1 1 1 1 0.


Si quieres correr el programa, necesitarás de la función "azar" (distribuido como azar.cc y azar.h) creado por J. Rogan. Pídeselo si quieres correr este programa.

Para usar el programa, tipeas el largo del arreglo (el ancho de la imagen), el numero de iteraciones (la altura de la imagen) y luego la regla, un numero por linea y solo ceros y unos. El resultado se llama imagen.png. Recuerda cambiarle el nombre antes de correr el programa una segunda vez, o perderas la primera version de imagen.png.


#include <iostream.h>
#include <math.h>
#include "azar.h"
#include "pngwriter.h"

int  main()
{
   
   
   int larg, radio=1, iter, val, nform=1, alt, anch;
   
   for(int c=0;c<2*radio+1;c++)
     {
	nform = nform*2;
     }

   cout <<"Ingrese el largo del arreglo..." << endl;
   cin >> larg ;
   cout << "Ahora, el numero de iteraciones" << endl;
   cin >> iter;
   
   alt=iter;
   anch= larg;
   
   int * holos = new int[larg];
   int * copia = new int[larg];
   int * form = new int[nform];
   
   pngwriter archivo(alt, anch, 56000, "imagen.png");
   
   randomize();
   
   cout << "Ahora, introduzca la regla...\n";
   for(int l=0;l<nform;l++){ cin >> form[l];}         //ingreso de la regla
   
   for (int r=0;r<larg;r++){copia[r]=iazar(0,1);}        //randomizado!
   
   for (int i=0;i<iter;i++)                                //iteracion en tiempo
     {
	for(int salida=0;salida<larg;salida++)
	  {
	     if(copia[salida]==0) archivo.plot(salida, alt-i,56000,56000,56000);
	     else archivo.plot(salida, alt-i, 0,0,0);
	  }  
		
	for(int cop=0;cop<larg;cop++)
	  {
	     holos[cop]=copia[cop];         //arreglos..copiar arreglos
	  }            
	
	//borde izquierdo
	val=holos[larg-1]*2*2+holos[0]*2+holos[1];
	copia[0]=form[val];
	
	//borde derecho
	val=holos[larg-2]*2*2+holos[larg-1]*2+holos[0];
	copia[larg-1]=form[val];
	
	//cuerpo    
	for (int j=1; j<larg-1;j++)                // iteracion a lo largo de la fila
	  {
	     //asignacion de la regla
	     val=holos[j-1]*2*2+holos[j]*2+holos[j+1];    //RECORDAR...RADIO 1 EXcLUSIVO....INTRODUCIR SUMATORIA
	     copia[j]=form[val];
	  }
     }
   
   
   delete [] holos;
   delete [] copia;	  
   delete [] form;
   archivo.close();

   return 0;
}







© 2002, 2003, 2004, 2005, 2006, 2007 Paul Blackburn