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;
}
|
|