Sets de Julia y Mandelbrot con Python

Creo que cualquiera que programe algo en cualquier momento de su vida acabará por preguntarse como podría generar ese carnaval de colores que son los fractales, y es posible que acabe por desistir bajo el pensamiento de que es complicado.

Bien, sin llegar a tocar la teoría, el algoritmo para determinar el número:
1. Tomamos C como el punto ( un número complejo, dos valores ).
2. Z = C
3. Mientras no se haya completado el límite de iteraciones:
4. Si Z.real2 + Z.imag 2 >= 4:
5. Devolvemos el número de iteraciones [ FIN ]
6. Sinó, Z = Z**2 + C [ volvemos a 3 ]
7. Si se acabaron las iteraciones, el punto no tiende a infinito.

Así de sencillo, para el set de Julia lo mismo, pero Z es el punto, y C una constante para todo el set que se renderiza.

Así, podemos escribir un script que genere fractales con poco código, hay poco más de una decena para cada set, pero hay mucho código que se podría evitar, como la clase Imagen, pero que es necesario para compilarlo con shedskin, que carece de PIL. [ fractal_shedskin.py ] Después del salto, explicación de las opciones y colorinchos ejemplos !

Los parámetros son estos: [-g] [-j ] [-p ][ -b ] [ -q ] [-x] [-o ] [- w ] [-h ] [-c

] [-i ] [- z ]

-g: La imágen se guarda en escala de grises -x: El coloreado se invierte -j: Se muestra el set de julia para el punto especificado ( dos números de punto flotante ) -p: Potencia ( normalmente 2 ) -b: Se toma el conjugado de Z antes de la transformación de cada iteración -q: No se muestra la salida -o: Imágen de salida [out.png] -w/h: / de la imágen [600x600] -c: s de la función ( dos números de punto flotante ) [ 0., 0.] -i: Número máximo de iteraciones [ 100 ] -z: Nivel de zoom ( tamaño que abarca la imágen ) [ 4. ] * Ejemplos ( Mandelbrot set ): ***

[caption id="attachment_614" align="aligncenter" width="300" caption="./ fractal_shedskin"][/caption]

[caption id="attachment_615" align="aligncenter" width="300" caption="./ fractal_shedskin -b"][/caption]

[caption id="attachment_616" align="aligncenter" width="300" caption="./ fractal_shedskin -c 0.36644749414062499637 0.59162698007812497547 - z 0.000002373046874999999448 -i 400"][/caption]

[caption id="attachment_617" align="aligncenter" width="300" caption="./ fractal_shedskin -p 5 -b -x"][/caption]

[caption id="attachment_618" align="aligncenter" width="300" caption="./ fractal_shedskin -p -2 -b"][/caption]

[caption id="attachment_619" align="aligncenter" width="300" caption="./ fractal_shedskin -p -4 -g"][/caption]

* Ejemplos ( Julia set ): ***

[caption id="attachment_620" align="aligncenter" width="300" caption="./ fractal_shedskin -j -1.1 0.1"][/caption]

[caption id="attachment_621" align="aligncenter" width="300" caption="./ fractal_shedskin -j -1.1 0.1 -b"][/caption]

[caption id="attachment_622" align="aligncenter" width="300" caption="./ fractal_shedskin -j 0.6 0.55 -p 4 -g"][/caption]

[caption id="attachment_613" align="aligncenter" width="300" caption="./ fractal_shedskin -j 0.3 0.6 -b"][/caption]

[Referencias] http://www.idiap.ch/~pabbet/code-snippets/image-processing/ [Código de HSL to RGB] http://mcgoodwin.net/julia/juliajewels.html

untagged

Ahora en Freenet ! » « [Haskell] cantidad de entropía en un archivo