#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
struct complesso
{
double r;
double i;
};
//****** MAIN *******//
int main (void){
char immagine_name[]="bu";
//*********** PARAMETRI *************//
long larghezza = 3000;
long altezza = 3000;
long deep = 5000;
long buddha = 1000000000;
double y1 = 2;
double x0 = -2, x1 = 2;
double y0 = -2;
//**********************************//
//aggiustamento parametri
double agg_temp;
agg_temp=y1;
y1=y0*(-1);
y0=agg_temp*(-1);
//**********************************//
time_t t;
srand((unsigned) time(&t));
long b=0;
long x,y;
long ** buddha_value;
buddha_value = (long**) malloc(larghezza * sizeof(long *));
for(b=0; b<larghezza; b++)
buddha_value[b] = (long*) malloc(altezza * sizeof(long));
for(x=0;x<larghezza;x++)for(y=0;y<altezza;y++)buddha_value[x][y]=0;
struct complesso *history;
history = (struct complesso*)malloc(deep * sizeof(struct complesso));
printf("operazioni iniziali effettuate, inizio cicli!\n");
for(b=0;b<buddha;b++){ //ciclo buddhabrot
//inizio elaborazione immagine
long x,y,d,i,a;
double real_x, real_y, colore;
struct complesso z,c,temp;
x=(rand())%larghezza;
y=(rand())%altezza;
real_x = ((x1-x0)/larghezza)*x+x0;
real_y = ((y1-y0)/altezza)*y+y0;
//analisi di mendelbrot
c.r = real_x;
c.i = real_y;
z.r = 0;
z.i = 0;
d = 0;
for(i=1;i<deep;i++){
if((z.r*z.r)+(z.i*z.i) > 4) {
d = i;
break;
}
temp.r = z.r;
temp.i = z.i;
z.r = (temp.r*temp.r) - (temp.i*temp.i) + c.r;
z.i = (temp.r*temp.i)*2 + c.i;
history[i].r = z.r;
history[i].i = z.i;
}
//controllo punto dell'insieme di mendelbrot
if(d!=0) {
for(a=0;a<d;a++){ //disegno la strada del punto
x=(long) ((double)(history[a].r-x0)*larghezza/(x1-x0));
y=(long) ((double)(history[a].i-y0)*altezza/(y1-y0));
if(x>0 && x<larghezza && y>0 && y<altezza){
buddha_value[x][y]++;
}
}
}
if(b%1000000==0)printf("%d su %d gruppi da 1000.000 cicli completati!\n",b/1000000,buddha/1000000);
} //fine buddha
//creo db
printf("\nCreazione db in corso...\n");
FILE *s;
s = fopen(immagine_name,"wb");
for(x=0;x<larghezza;x++)
for(y=0;y<altezza;y++){
fprintf(s,"%d%c",buddha_value[x][y],0);
}
fclose(s);
printf("db creato.\n");
printf("fine!");
getchar();
return 0;
}