Parallel C++ fractal renderer for escape-time fractals.
at main 52 lines 1.4 kB view raw
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}