#include #define BAIL_OUT 16 #define MAX_ITER 100 #define WIDTH 800 #define HEIGHT 800 double map(int value, int min, int max, int map_min, int map_max) { double R = (double) (map_max - map_min) / (double) (max - min); double y = map_min + (value * R) + R; return y; } void mandelbrot(double *field, int w, int h, int bail_out, int max_iter) { double xPrime, yPrime, real, imaginary, realPrime, imaginaryPrime,x2, y2; int bailed = 0, x, y, k; for (x = 0; x < w; x++) { for (y = 0; y < h; y++) { xPrime = map(x, 0, w, -2, 2); yPrime = map(y, 0, h, -2, 2); x2 = xPrime; y2 = yPrime; // iterate a^2 - b^2 + 2ab for (k = 0; k < max_iter; k++) { bailed = 0; // a^2 - b^2 real = xPrime * xPrime - yPrime * yPrime; // 2ab imaginary = 2 * xPrime * yPrime; // real + c xPrime = real + x2; // imaginary + c yPrime = imaginary + y2; if ((xPrime * xPrime + yPrime * yPrime) > bail_out) { break; } } if (k == max_iter) { field[x * h + y] = 0; } else { field[x * h + y] = k; } } } } int main(int argc, char **argv) { double pix_field[WIDTH][HEIGHT]; mandelbrot((double *) pix_field, WIDTH, HEIGHT, BAIL_OUT, MAX_ITER); for (int i=0; i< WIDTH; i++) { for (int j=0; j