Inicio > Artículos, Geometría > Plantas aleatorias

Plantas aleatorias

Jueves, 30 de enero de 2014
Citar este artículo 9.501 visitas
Plantas aleatorias

El año pasado mostré algunas pautas sobre cómo se modelan los árboles usando los recursos típicos del arte generativo: la recursividad y aleatoriedad. Este tipo de construcciones permiten ilustrar muy claramente el sentido de estas ideas para entender la geometría el mundo real.

Indagando un poco más sobre cómo las formas de los árboles y las plantas, presento en este post una secuencia similar, para construir una planta que podríamos catalogar de “aleatoria”.

En el post La geometría de los árboles, del 2012, muestro cómo logramos sucesivamente construir árboles cada vez más realistas, a partir de códigos que involucran recursividad y aleatoriedad. En este post sigo la misma lógica, sólo que el objetivo es construir una planta que en su código involucra un elemento aleatorio.

Este post participa en la Versión 4,1231056256 del carnaval matemáticas en español, organizado en el Blog Cuentos Cuánticos.

Los diseños que a continuación muestro están hechos con Context Free, cuyos archivos incluyo para su descarga, y son esencialmente archivos de texto plano con extensión .cfdg. Context free se puede descargar de su sitio oficial: http://www.contextfreeart.org.

De los códigos que a continuación se indican, es importante tener presente:

  • s: corresponde a escalar, con un valor entre 0 y 1 (siendo 1, un 100%)
  • r: corresponde a rotar, con un valor en grados
  • x: corresponde a trasladar horizontalmente, con valores donde 1 corresponde a una unidad (o el 100% del tamaño de la figura actual)
  • y: corresponde a trasladar verticalmente, con valores donde 1 corresponde a una unidad (o el 100% del tamaño de la figura actual)

1. Arbol 2D

La estructura básica de un árbol, es un tronco y ramas a ambos lados. Para ello, partiendo en este caso de cuadrados, el tronco se obtiene de trasladar hacia arriba un cuadrado, a medida que se va reduciendo su tamaño.

Las ramas se obtienen trasladando hacia un lado, girando y escalando. Una buena forma de observar esto, es identificar con qué transformaciones se puede convertir el tronco en una rama.

Código

startshape arbol
rule arbol
{
SQUARE{}
arbol{s .94 y .9 h 3 } //tronco
arbol{s .3 x -.3 r 46 y .9} //ramas derechas
arbol{s .3 x .3 r -46 y .9} //ramas izquierdas
}

2. Arbol curvado

 

Otro elemento, que le añade naturalidad al árbol, es que sus ramas se extiendan con cierta curvatura. En el fondo esto corresponde a modificar cómo se despliega el tronco, dado que las ramas son copias del mismo.

Del ejemplo anterior, basta con agregar en el código del tronco un pequeño giro, por ejemplo, de 1 grado.

Código

startshape arbol
rule arbol
{
SQUARE{}
arbol{s .94 y .9 r 1} //tronco
arbol{s .3 x -.3 r 46 y .9} //ramas derechas
arbol{s .3 x .3 r -46 y .9} //ramas izquierdas
}

 

3. árbol aleatorio

Lo que modificamos en el ejemplo anterior es más importante de lo que pueda aparecer, porque si el tronco y las ramas van girando, no sólo se obtiene una apariencia más natural, sino que se está intentando controlar el aspecto que más claramente es aleatorio en la forma de los árboles: sus ramas se van curvando, pero no siempre siguiendo un patrón. Luego, si logramos que este atributo cambie aleatoriamente, podemos imitar más efectivamente la apariencia de los árboles.

Para lograr aleatorizar el ángulo de giro, basta con duplicar la regla “arbol”, e indicar en cada una de sus versiones un ángulo diferente. Cuando tenemos una regla duplicada, en rigor estamos definiéndola de manera ambigua, y Context Free maneja la ambiguedad eligiendo una un otra definición aleatoriamente. Luego si indicamos en una definición que el tronco gire en 10º y en la otra; en -10º, este atributo cambiará aleatoriamente entre uno de ambos valores.

Código

startshape arbol
rule arbol
{
SQUARE{}
arbol{s .94 y .9 r 10} //tronco
arbol{s .3 x -.3 r 46 y .9} //ramas derechas
arbol{s .3 x .3 r -46 y .9} //ramas izquierdas
}
rule arbol
{
SQUARE{}
arbol{s .94 y .9 r -10 } //tronco
arbol{s .3 x -.3 r 46 y .9} //ramas derechas
arbol{s .3 x .3 r -46 y .9} //ramas izquierdas
}

 

4. Árbol aleatorio en colores

Los colores en Context Free se modifican controlando tres atributos: tinte (h), brillo (b) y saturación. Sin entrar en mucho detalle sobre estos elementos, al modificar los colores de manera coordinada con las transformaciones geométricas, es posible obtener mejores resultados gráficos, pero también, revelar u ocultar elementos de la geometría de estos objetos. En este caso, el fondo negro permite ocultar los cuadrados de la base, y resaltar el detalle de las ramas.

Código

startshape arbol
background {b -1}//fondo negro
rule arbol
{
SQUARE{}
arbol{s .94 y .9 r 10 h 3 b .02 sat .4} //tronco
arbol{s .3 x -.3 r 46 y .9} //ramas derechas
arbol{s .3 x .3 r -46 y .9} //ramas izquierdas
}
rule arbol
{
SQUARE{}
arbol{s .94 y .9 r -10 h 3 b .02 sat .4} //tronco
arbol{s .3 x -.3 r 46 y .9} //ramas derechas
arbol{s .3 x .3 r -46 y .9} //ramas izquierdas
}

 

5. Planta aleatoria

La idea de este tipo de planta, surge de rotar el árbol aleatorio del ejemplo anterior, una cantidad finita de veces. Por ejemplo, girarlo 24 veces en 15º, alrededor de su base, genera una interesante planta que, si no fuera aleatoria, contaría con simetría rotacional.

 

Para lograr esto, definimos una regla llamada “planta” que consiste en girar 24 veces en 15º la regla “árbol”, que es el ejemplo anterior:

 

Código

startshape arbol
background {b -1}
rule planta
{
24 * {r 15} arbol{}
}

rule arbol
{
SQUARE{}
arbol{r 10 s .94 y .9 h 3 b .02 sat .4}
arbol{s .3 x -.3 r 46 y .9}
arbol{s .3 x .3 r -46 y .9}
}
rule arbol
{
SQUARE{}
arbol{r -10 s .94 y .9 h 3 b .02 sat .4}
arbol{s .3 x -.3 r 46 y .9}
arbol{s .3 x .3 r -46 y .9 }
}

 

Lo más interesante de estos códigos, es que cada vez que se ejecutan, se genera una combinación diferente, de manear que un mismo código permite generar resultados aparentemente diferentes. Tómese los siguientes 4 ejemplos, que corresponden al mismo código ejecutado en momentos diferentes.

Variaciones de un fractal 3D

Finalmente, dejo un video de otro tipo de plantas (3D) que estuve explorando años atras, con un programa un poco más complejo llamado Structure Synth, cuya geometría tiene algo en común con las ideas de aleatoriedad que acabo de mostrar. Este video viene del post Variaciones de un fractal 3D del 2011

Artículos, Geometría , , , ,

  1. Sin comentarios aún.
Comentarios cerrados.

Artículo publicado en http://www.geometriadinamica.cl/2014/01/plantas-aleatorias/.