Arte generativo con Context Free
Luego del quinto aniversario de este Blog, me he propuesto ampliar un poco el espectro de temas, acercándome especialmente a un área en la que enseño desde hace algunos años: la programación.
En el primer post de esta nueva categoría, voy a mostrar algunos ejemplos de diseños, a veces muy complejos, generados a partir de códigos relativamente simples, lo que tiene una directa relación con los fractales.
Para ello voy a recurrir a un interesante lenguaje que conocí sólo unos meses atrás, llamado “Context free”.
Si bien todo el sentido de este blog parte de mi entusiasmo por la geometría, en los últimos años me he venido vinculando más con la programación, y este verano tendré el privilegio de dictar un curso de arte generativo en el Penta UC, lo que se articula iterando transformaciones geométricas.
Quizás ha sido el estar escuchando con mayor atención las palabras de Mandelbrot en los últimos meses lo que más me ha motivado a buscar formas de construir fractales y así di con algunos lenguajes que tienen mucho en común con estos temas, como el que voy a mostrar ahora, Context Free, que en palabras de sus autores es:
… un programa que genera imágenes a partir de instrucciones escritas, lo que se denomina gramática. El programa sigue estas instrucciones y en unos pocos segundos crea imágenes que pueden contener millones de figuras.
Este proceso se lleva a cabo, iterando las reglas definidas a partir de círculos, cuadrados o triángulos, hasta que las figuras son más pequeñas que un pixel.
En fin, sin explicar mucho de la gramática de Context Free, dejo a continuación algunos ejemplos para los usuarios inquietos que quieran jugar un poco con estos códigos.
1. Espiral
2. Sierpinski
3. Sierpinski en colores
4. Árbol Pitagórico
5. Árbol Pitagórico color
6. Árbol asimétrico
7. Ramas aleatorias
Algunas notas de sintaxis
En general esta gramática se basa en definir reglas. Cada regla se define con el término rule
En el primer ejemplo, la regla espiral consiste en un círculo al que se aplican las siguientes transformaciones: se reduce a un 90% de su tamaño (s .9), se gira en 12º (r 12) y traslada horizontalmente un 100% a la derecha (x 1). Aplicando iterativamente estas transformaciones, la regla genera una espiral, que puede variar significativamente al modificar lo valores.
Otras transformaciones que se suelen indicar, involucran colores, como son el control del matiz (hue ó h, de 0 a 360), saturación (sat, de 0 a 1), el brillo (b, de 0 a 1) y la opacidad (a de -1 a 1)
Estos son algunos ejemplos con los que he estado experimentando en las últimas semanas, pero en el sitio oficial de Context Free: http://www.contextfreeart.org, se puede descargar el software, que es mucho más funcional y rápido que estos ejemplos.
Cabe destacar que para generar estos ejemplos utilicé los scripts de Aza Raskin del sitio Algorithm Ink (el programa “Context free” se debe instalar).
Sobre transformaciones y fractales
En rigor, como explican sus autores, Context free no genera fractales, aunque parezcan serlo. El detalle está en que, en vez de reemplazar un objeto por otro, “dibuja” uno sobre otro. Así, en el caso del triángulo de Sierpinski, no reemplaza el primer triángulo por otros tres, sino que los pinta sobre el primero en otro color.
A pesar de lo anterior, no deja de ser interesante el contar con una herramienta que, a partir de gramaticas relativamente simples, permite construir diseños de enorme complejidad, y cuyas definiciones dependen principalmente de transformaciones geométricas.
Ejemplo de aleatoriedad
El ejemplo más interesante de todos es el último, que en cada ejecución es diferente (prueben ejecutar código varias veces).
Esto ocurre porque hay una regla ramas, que está definida de dos formas distintas, pero la segunda definición está, digamos, ponderada por 0,2. Esto genera que Context Free deba elegir en cada iteración una de estas reglas, y la probabilidad de que cada regla se utilice es proporcional a su “peso”.
De esta manera, la primera regla “ramas” (rule ramas{ …), está ponderada por 1. La segunda regla “ramas”, (rule ramas 0.2{ …) está ponderada por 0.2, por lo que la probabilidad de que se seleccione la primera regla es 1 / 1.2 y la probabilidad de que se selecciones la segunda es 0.2 / 1.2.
A estas reglas a veces les llaman “ambiguas”, y generan diseños con apariencia mucho más “natural”, dado que están sujetos al azar, lo que es un elemento muy frecuente del arte generativo.
En suma, los alcances de este tipo de recursos son virtualmente infinitos, y este es el aspecto en común con los fractales, que como caracterizara Benoit Mandelbrot: “De las leyes más simples nacen infinitas maravillas que se repiten indefinidamente”.


Ejecutar código
Precioso post y muy interesante.
Gracias por tu participación en el carnaval y cumpleaños feliz.
Arte inteligente, lo felicito. Me gustaría una sugerencia de como aplicarlo para el trabajo con escolares. Muchas gracias.
Estimad@, en realidad hay muchas ideas interesantes en este tema. Para mí ha sido todo un descubrimiento y he tenido la suerte de contar con un espacio para experimentar. Lo que más recomendaría es no tenerle miedo a probar, y estar muy atento a esas ideas que surjan y que son potentes, como la recursividad y la aleatoriedad.
En los próximos días voy a publicar un pequeño artículo mostrando la secuencia didáctica que seguí con mi curso, así que espero que le sirva.
Saludos cordiales
Rafael
muy agradecida estaré atenta a su publicación.
Estimada, mire este post: http://www.geometriadinamica.cl/2011/09/arte-generativo-en-el-pentauc/
Saludos
Rafael