/* gcc -o mandelbrot mandelbrot.c `allegro-config --libs` -DMANDEL_ITER=20 */
#include <allegro.h>
#define ZOOM 140.0
int mandelbrot(double, double);
int main()
{
int i, j;
allegro_init();
install_keyboard();
set_color_depth(desktop_color_depth());
if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, 600, 600, 0, 0) != 0)
return 1;
for (i = 0; i < SCREEN_W; ++i) {
double re = ((double)i - 300.0) / ZOOM;
for (j = 0; j < SCREEN_H; ++j) {
double im = ((double)j - 300.0) / ZOOM;
int its = mandelbrot(re, im),
c = 255 - its * 255 / MANDEL_ITER;
putpixel(screen, i, j, makecol(c, c, c));
}
}
while (!keypressed());
return 0;
} END_OF_MAIN()
int mandelbrot(double c_r, double c_i)
{
double z_r = 0.0, z_i = 0.0;
int i = 0;
for (i = 0; i < MANDEL_ITER; ++i) {
double z_r_t = z_r * z_r - z_i * z_i + c_r,
z_i_t = 2 * z_r * z_i + c_i;
z_r = z_r_t;
z_i = z_i_t;
if (z_r * z_r + z_i * z_i > 4)
return i;
}
return i;
}