Versión 1.0 - julio de 2005
/*
Compilar con la opcion c99:
* gcc -std=c99 -c filename.c -o filename.o
*
* Enlazar con la opcion de librerías matematicas y con allegro:
* gcc -lm -o filename filename.o `allegro-config --libs`
*
* En Anjuta, ejecutar en terminal allegro-config --libs,
* y su salida son las librerías que tenemos que pasar
al gcc. Así que vamos a Opciones-> Comandos -> Construir
Archivo y le ponemos ahí todas las opciones.
*/
/*
julia.c y sus derivados.
Un punto del plano complejo pertenece al conjunto de
Julia si su distancia al origen después de realizar infinitas
iteraciones es menor o igual que 2.
La iteración es: z=z**2+c
Elegimos un valor para c y comprobamos si un punto z pertenece al conjunto.
Si es así le damos un color.
Puntos c interesantes:
0+0I círculo
0.1+0.1I -0.5+0.5I -1.1+0.1I -0.2+0.75I 0.25+0.52I
0.25+0.5I 0+I 0.66+I 1+I
El resultado también queda bien si evaluamos 25 iteraciones y si pertenece al
conjunto le damos un color. A continuación realizamos 25 iteraciones más
y si pertenece le damos otro color. Y repetimos esto una tercera vez.
Así vemos mejor el fractal en su límite, porque hay puntos que con pocas
iteraciones pertenecen a Julia y tendrán un color, pero con más no, y
se quedan con ese color. Sin embargo los puntos que realmente son de
Julia pasarán por los tres colores pero se quedarán con el último.
Por lo anterior no podemos dibujar el fractal pintando los puntos que no
pertenecen al conjunto ( en vez de los que pertenecen) porque entonces todos
los puntos en la frontera se quedarán al final con el mismo color.
En la iteración del conjunto de Mandelbrot se produce para muchos puntos
overflow. Puede que en Julia también ocurra (no lo comprobé).
Tal como está escrito el programa no hay problema. Hay problema si ponemos:
if (cabs(z)>2) putpixel(screen,i,j,azul); porque un punto overflow no dirá
que sea mayor que dos. Si ponemos printf("%e\n",cabs(z)); nos mostrará nan,
que quiere decir not a number, vaya que es el overflow.
Una manera por tanto de saber cuáles son los mayores de 2 es poner:
if (cabs(z)<2) putpixel(screen,i,j,azul);
else {
aquí están los mayores de 2
}
Si queremos poner directamente if (cabs(z)>2) tendremos que poner un control
en el bucle for con un break:
if (cabs(z)>1e30) break;
*/
#include "allegro.h"
#include