\\Written by Tarje Hillersoey -thi007
include
#include
#include
using namespace std;
#define WIDTH 1000 //Creating the size of the canvas
#define HEIGHT 1000
int find_convergence(int x, int y){ //Creates a function which assings a value to each pixel depending on how fast it converges/diverges and stores it as an integer.
complex z((double)x/(WIDTH/2) -1.5, (double)y/(HEIGHT/2) - 1); //Pixelating the plane
complex pixel (0,0); //Here, z and pixel have essentially changed roles from the Mandelbrot plot
complex c (-0.8,0.156); //Set the starting point for the iterations, very sensitive to initial conditions
int iter = 0;
while(abs(z) < 2 && iter <= 100){ //Conditions for iterations, here 100 is chosen (somewhat arbitrary) as the maximum number of iterations. This may be changed depending on you pr$
z = pow(z, 2) + c; //of how analytical you want the program to be and how much runtime is acceptable.
iter++;
}
if (iter < 100){
double scale = 255*iter/50;
if (scale > 255) return 255;
else return scale;
}
else return 0; //If the function remains bounded under the threshold (100) number of itearations for a given point, then it is assigned a color value of 0.
}
void julia(){
ofstream output;
output.open("Julia.ppm"); //Creating the ppm format
TH2F *h2 = new TH2F("h2","Julia",1000,-2,2,1000, -2,2); //Creating the standard Canvas
if (output.is_open()){
output << "P3\n" << WIDTH << " " << HEIGHT << " 255\n";
for (int i = 0; i < WIDTH; i++){ //Iterate through the grid of pixels.
for (int j = 0; j < HEIGHT; j++){
double x=h2->GetXaxis()->GetBinCenter(i);
double y=h2->GetYaxis()->GetBinCenter(j);
int intensity = find_convergence(i, j);
output << intensity << " " << intensity << " " << intensity/2 << "\n"; //By removing the double slash on this line a ppm picture will also be created.
h2->Fill(x,y, intensity); //The grid is now filled with color depending on the divergence (convergence) rate.
}
}
}
output.close();
h2->Draw("colz");
}