|
@@ -2,13 +2,11 @@
|
|
|
#include "../libpng/img.h"
|
|
|
|
|
|
|
|
|
-#define BAIL_OUT 64
|
|
|
-#define MAX_ITER 8192
|
|
|
-
|
|
|
-#define WIDTH 800
|
|
|
-#define HEIGHT 800
|
|
|
-
|
|
|
+#define BAIL_OUT 8192
|
|
|
+#define MAX_ITER 65536
|
|
|
|
|
|
+#define WIDTH 4096
|
|
|
+#define HEIGHT 4096
|
|
|
|
|
|
double map(int value, int min, int max, int map_min, int map_max)
|
|
|
{
|
|
@@ -21,7 +19,7 @@ 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;
|
|
|
+ int x, y, k;
|
|
|
for (x = 0; x < w; x++) {
|
|
|
for (y = 0; y < h; y++) {
|
|
|
xPrime = map(x, 0, w, -2, 2);
|
|
@@ -31,7 +29,6 @@ void mandelbrot(double *field, int w, int h, int bail_out, int max_iter)
|
|
|
|
|
|
// 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
|
|
@@ -40,7 +37,7 @@ void mandelbrot(double *field, int w, int h, int bail_out, int max_iter)
|
|
|
// x = real + c
|
|
|
xPrime = real + x2;
|
|
|
// y = imaginary + c
|
|
|
- yPrime = imaginary +y2;
|
|
|
+ yPrime = imaginary + y2;
|
|
|
|
|
|
if ((xPrime * xPrime + yPrime * yPrime) >
|
|
|
bail_out) {
|
|
@@ -60,9 +57,11 @@ void mandelbrot(double *field, int w, int h, int bail_out, int max_iter)
|
|
|
int main(int argc, char **argv)
|
|
|
{
|
|
|
|
|
|
- double pix_field[WIDTH][HEIGHT];
|
|
|
+ double * pix_field;
|
|
|
|
|
|
- mandelbrot((double *) pix_field, WIDTH, HEIGHT, BAIL_OUT,
|
|
|
+ pix_field = malloc(WIDTH * HEIGHT * sizeof(double));
|
|
|
+
|
|
|
+ mandelbrot(pix_field, WIDTH, HEIGHT, BAIL_OUT,
|
|
|
MAX_ITER);
|
|
|
|
|
|
pix_row rows[WIDTH];
|
|
@@ -77,14 +76,14 @@ int main(int argc, char **argv)
|
|
|
for (int i = 0; i < WIDTH; i++) {
|
|
|
rows[i].p = malloc(HEIGHT * sizeof(pix));
|
|
|
for (int j = 0; j < HEIGHT; j++) {
|
|
|
- p.r = map(pix_field[i][j], 0, MAX_ITER, 0, 255);
|
|
|
- p.g = map(pix_field[i][j], 0, MAX_ITER, 0, 255);
|
|
|
- p.b = map(pix_field[i][j], 0, MAX_ITER, 0, 255);
|
|
|
+ p.r = map(pix_field[i * HEIGHT + j], 0, MAX_ITER, 0, 255);
|
|
|
+ p.g = map(pix_field[i * HEIGHT + j], 0, MAX_ITER, 0, 255);
|
|
|
+ p.b = map(pix_field[i * HEIGHT + j], 0, MAX_ITER, 0, 255);
|
|
|
rows[i].p[j] = p;
|
|
|
}
|
|
|
}
|
|
|
sprintf(filename, "mandel.png");
|
|
|
- img = initialize_png("image000", filename, WIDTH, HEIGHT);
|
|
|
+ img = initialize_png("mandelbrot", filename, WIDTH, HEIGHT);
|
|
|
write_image(&img, rows);
|
|
|
finish_image(&img);
|
|
|
for (int i = 0; i < WIDTH; i++) {
|
|
@@ -92,5 +91,7 @@ int main(int argc, char **argv)
|
|
|
free(rows[i].p);
|
|
|
}
|
|
|
|
|
|
+ free(pix_field);
|
|
|
+
|
|
|
return (0);
|
|
|
}
|