Parallel C++ fractal renderer for escape-time fractals.
1#include <bits/stdc++.h>
2
3#include <bitmap_image.hpp>
4#include <cmath>
5#include <fstream>
6
7int main() {
8 const int canvasSize = 800;
9 const int maxIteration = 255;
10 float arrayX[canvasSize];
11 float arrayY[canvasSize];
12
13 bitmap_image fractal(canvasSize, canvasSize);
14 fractal.clear();
15
16 const long double fract = 1 / (long double)(canvasSize * canvasSize);
17 long double percent = 0.0;
18
19 // const float factor = (2.24 / canvasSize);
20 for (int i = 0; i < canvasSize; i++) {
21 // arrayX[i] = (factor * i) - 1.77;
22 // arrayY[i] = (factor * i) - 1.12;
23 percent += fract;
24 arrayX[i] = std::lerp(-2, 0.24, percent);
25 arrayY[i] = std::lerp(-1.12, 1.12, percent);
26 }
27
28 for (float &xCoordinate : arrayX) {
29 for (float &yCoordinate : arrayY) {
30 float x = 0.0;
31 float y = 0.0;
32 float xSquared = 0.0;
33 float ySquared = 0.0;
34 int iteration = 0;
35
36 while ((xSquared + ySquared <= 4) && (iteration < maxIteration)) {
37 y = 2 * x * y + yCoordinate;
38 x = xSquared - ySquared + xCoordinate;
39 xSquared = pow(x, 2);
40 ySquared = pow(y, 2);
41 iteration++;
42 }
43
44 const int xPixel = &xCoordinate - arrayX;
45 const int yPixel = &yCoordinate - arrayY;
46 fractal.set_pixel(xPixel, yPixel, iteration, iteration, iteration);
47 }
48 }
49
50 fractal.save_image("mandelbrot.bmp");
51 return 0;
52}