12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #include <stdio.h>
- #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<HEIGHT; j++)
- {
- printf("[%.2lf]", pix_field[i][j]);
- }
- printf("\n");
-
- }
- return (0);
- }
|