Autómata Celular
"
Asignación #2 Implementación de un sistema complejo
IntroducciónEl tema que elegí para esta asignación fue el de autómatas celulares. Objetivo
Seleccione este tema porque me interesa el desarrollo de sistemas caóticos y descubrí que con una de las reglas de los automates celulares se pueden crear algunos. Por ejemplo la regla número 90 nos crea los triángulos de Sierpiński.
Desarollo
Para el desarollo de este sistema primero me enfoque en como modelar las reglas en un sistema computacional, para lo que pensé en utilizar un vector con valores booleanos que representara las reglas de esta manera :
Este sistema se rige por valores booleanos para pintar los pixeles y dibujar la regla correspondiente. Además se toma en cuenta que un autómata celular puede ser sensible a los valores iniciales de entrada (caracteristica de un sistema caótico) así que se toma en cuenta si el desarrollo del autómata inicie con un motivo inicial aleatorio o que inicie con un vector booleano de descrito por esta formula:
"
Asignación #2 Implementación de un sistema complejo
IntroducciónEl tema que elegí para esta asignación fue el de autómatas celulares. Objetivo
Desarrollar un sistema capaz de recrear algunas reglas de los autómatas celulares utilizando solamente el lenguaje de programación java.
Justificación
Justificación
Desarollo
Para el desarollo de este sistema primero me enfoque en como modelar las reglas en un sistema computacional, para lo que pensé en utilizar un vector con valores booleanos que representara las reglas de esta manera :
![]() |
Vector booleano |
De cualquier forma eso es desición de cada persona al ejecutar el sistema.
Las reglas que tome en cuenta fueron las siguientes:
Código
Las partes interesantes del código iniciando con la parte que decide que color y pixel pintar.
public void paint(Graphics g){ g2 = (Graphics2D) g; g2.setStroke(stroke); for(int y = 0; y < Automata.SIZE_Y; y++){ if(y != 0) area = Regla.evalua(area,y-1,regla); for(int x = 0; x < Automata.SIZE_X; x++){ color = (area[x][y] == true)?Color.WHITE:Color.BLACK; g2.setPaint(color); g2.draw(new Line2D.Float(x, y, x, y)); } }
Ahora estas son las reglas
public static final Boolean[] regla30 = {false,false,false,true,true,true,true,false}; public static final Boolean[] regla90 = {false,true,false,true,true,false,true,false}; public static final Boolean[] regla110 = {false,true,true,false,true,true,true,false}; public static final Boolean[] regla150 = {true,false,false,true,false,true,true,false}; public static final Boolean[] regla184 = {true,false,true,true,true,false,false,false};
y por ultimo la seccion donde se decide el valor de la siguiente casilla
Boolean[] subArray = { area[size-1][y], area[0][y], area[1][y] }; for(int x = 0; x < size; x++){ if(x == 0){ area[x][y+1] = aplicaRegla(subArray,regla); }else if(x == size-1){ subArray[0] = area[x-1][y]; subArray[1] = area[x][y]; subArray[2] = area[0][y]; area[x][y+1] = aplicaRegla(subArray,regla); }else{ subArray[0] = area[x-1][y]; subArray[1] = area[x][y]; subArray[2] = area[x+1][y]; area[x][y+1] = aplicaRegla(subArray,regla); } } return area;
Los resultados fueron los esperados, ya que dichas reglas ya fueron comprobadas desde hace un par de años por Stephen Wolfram. Sin embargo descubrí que un sistema complejo de ese tipo puede llegar a tener cambios muy interesantes con solo cambiar sus valores iniciales.
Video
Conclusiones
Video
Conclusiones
Como antes mencioné los resultados fueron los esperados, los autómatas celulares dan principio para la creación de fractales simples. Ahora tomando en cuenta los patrones quizá diseñe un sistema que relacione los automatas con sonidos y no con pixeles.
Asignación #2 Implementación de un sistema complejo
IntroducciónEl tema que elegí para esta asignación fue el de autómatas celulares. Objetivo
Desarrollar un sistema capaz de recrear algunas reglas de los autómatas celulares utilizando solamente el lenguaje de programación java.
Justificación
Justificación
Desarollo
Para el desarollo de este sistema primero me enfoque en como modelar las reglas en un sistema computacional, para lo que pensé en utilizar un vector con valores booleanos que representara las reglas de esta manera :
![]() |
Vector booleano |
De cualquier forma eso es desición de cada persona al ejecutar el sistema.
Las reglas que tome en cuenta fueron las siguientes:
Código
Las partes interesantes del código iniciando con la parte que decide que color y pixel pintar.
public void paint(Graphics g){ g2 = (Graphics2D) g; g2.setStroke(stroke); for(int y = 0; y < Automata.SIZE_Y; y++){ if(y != 0) area = Regla.evalua(area,y-1,regla); for(int x = 0; x < Automata.SIZE_X; x++){ color = (area[x][y] == true)?Color.WHITE:Color.BLACK; g2.setPaint(color); g2.draw(new Line2D.Float(x, y, x, y)); } }
Ahora estas son las reglas
public static final Boolean[] regla30 = {false,false,false,true,true,true,true,false}; public static final Boolean[] regla90 = {false,true,false,true,true,false,true,false}; public static final Boolean[] regla110 = {false,true,true,false,true,true,true,false}; public static final Boolean[] regla150 = {true,false,false,true,false,true,true,false}; public static final Boolean[] regla184 = {true,false,true,true,true,false,false,false};
y por ultimo la seccion donde se decide el valor de la siguiente casilla
Boolean[] subArray = { area[size-1][y], area[0][y], area[1][y] }; for(int x = 0; x < size; x++){ if(x == 0){ area[x][y+1] = aplicaRegla(subArray,regla); }else if(x == size-1){ subArray[0] = area[x-1][y]; subArray[1] = area[x][y]; subArray[2] = area[0][y]; area[x][y+1] = aplicaRegla(subArray,regla); }else{ subArray[0] = area[x-1][y]; subArray[1] = area[x][y]; subArray[2] = area[x+1][y]; area[x][y+1] = aplicaRegla(subArray,regla); } } return area;
Los resultados fueron los esperados, ya que dichas reglas ya fueron comprobadas desde hace un par de años por Stephen Wolfram. Sin embargo descubrí que un sistema complejo de ese tipo puede llegar a tener cambios muy interesantes con solo cambiar sus valores iniciales.
Video
Conclusiones
Video
Conclusiones
Como antes mencioné los resultados fueron los esperados, los autómatas celulares dan principio para la creación de fractales simples. Ahora tomando en cuenta los patrones quizá diseñe un sistema que relacione los automatas con sonidos y no con pixeles.
0 comentarios:
Publicar un comentario