Curlicue Fractal en Unity 5

El otro día estuve comentando con mi colega Patrick sobre las infinitas posibilidades artísticas que ofrecen los “Curlicue Fractal”.
A los que hayáis sufrido en vuestras carnes el estudio de los fundamentos matemáticos más profundos sobre cálculo infinitesimal seguramente os sonará.
A los que no, os lo explico brevemente. Un fractal es un objeto geométrico cuya estructura básica, fragmentada o irregular, se repite a diferentes escalas. Las maneras más comunes de determinar lo que hoy denominamos dimensión fractal fueron establecidas a principios del siglo XX en el seno de la teoría de la medida.(Wikipedia).

Dado que el Universo no son más que infinitas matemáticas, en la naturaleza se dan constantemente formas fractales a nivel molecular, por ejemplo, en un simple brócoli:

Dentro de los fractales existen multitud de familias y tipos. Entre ellos se encuentra el Curlicue Fractal.

El curlicue fractal es una figura obtenida por el siguiente enunciado:

The curlicue fractal is a figure obtained by the following procedure. Let s be an irrational number. Begin with a line segment of unit length, which makes an angle phi_0=0 to the horizontal. Then define theta_n iteratively by  theta_(n+1)=(theta_n+2pis) (mod 2pi),  with theta_0=0. To the end of the previous line segment, draw a line segment of unit length which makes an angle  phi_(n+1)=theta_n+phi_n (mod 2pi),

Dicho de otra forma, un Curlicue Fractal esa hecho por repetidas espirales conectadas entre sí que varían en escala y rotación. Un númerio irracional ‘s’ controla la característica forma y generación de estas espirales del siguiente modo:

theta(0) = 0
phi(0) = 0

theta(n+1) = (theta(n) + 2*PI*s) MOD (2*PI)
phi(n+1) = (phi(n) + theta(n)) MOD (2*PI)

Cuya distribución en un espacio de N2 se da por las coordenadas:
x(n) = cos(phi(n))
y(n) = sin(phi(n))

Como resultado en un espacio de 2 dimensiones, se pueden obtener las siguientes formas artísticas únicas, según qué constante “s”:

Tras todo este rollo paso a la parte que nos interesa, la generación de fractales en Unity 5.

La siguiente función en C# dibuja estos fractales:

void DrawCurlicue(GameObject particle, float s) {
float theta, phi, x0, y0, x1, y1;
theta = 0;
phi = 0;
x0 = 0;
y0 = 0;

for (int i = 1; i <= 10000; i++) {
x1 = x0 + Mathf.Cos(phi);
y1 = y0 + Mathf.Sin(phi);

x0 = x1;
y0 = y1;

phi = (theta + phi) % (2 * Mathf.PI);
theta = (theta + 2 * Mathf.PI * s) % (2 * Mathf.PI);

var new_obj = Instantiate(particle, new Vector3(x1, y1, (i/100f)), Quaternion.identity) as GameObject;
new_obj.transform.parent = particle_in_scene.transform;
}
}

Pasando por parámetro un tipo GameObject que en este caso es una esfera, y una constante real “s”, instancio en un espacio Vector3 hasta 10000 partículas que conforman el Curlicue Fractal.

3 2 11

 

Un impresionante, precioso resultado, único y con infnitas formas (un fractal por cada número float real)

https://dl.dropboxusercontent.com/u/11143518/fractals/curlicue/index.html

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Time limit is exhausted. Please reload the CAPTCHA.