/***********************************************
* Julia3DintGen2.c
*
*  Generates a RAW format file of a 3D image 
*  of a Julia set (grayscale)
*
*  C source file by Alberto Strumia
*
************************************************/


#include<stdio.h>		

/* defintion of constants */

#define Radius 10		
#define Side 2.5		
#define Cx -0.7		
#define Cy 0.4			
#define M 700		
#define Num 255	

/* main program */
main()
{
	
	int p, q, n, wext, wint, r[M];					
	double x, y, xx, yy, Incx, Incy, md;	
	
ne file di testo dei dati */
	
	FILE *fp;
	fp = fopen("Julia.raw","w");
	
	for (p = 1; p <= M; p++)
	{
		
			printf("%i %%\n", p*100/M);	
			
			Incx = -Side + 2*Side*p/M;
		
		for (q = 1; q <= M; q++)
		{
			
			Incy = -Side + Side*(p+q)/M;
			
		x = Incx;
		y = Incy;
		wext = 0;
			
			for ( n = 1; n <= Num; ++n)
			{
				xx = (x*x - y*y)*(x*x - y*y) - 4*x*x*y*y - Cx;
				yy = 4*x*y*(x*x - y*y) - Cy;
				
				x = xx;
				y = yy;
				md = x*x + y*y;
				

				if ( md > Radius )
				  {
					wext = n;
					n = Num;
				  }
				else
				 {
				if ( n <= 5 )
				   {
				wint = md*3000;
				wext = wint;
					}
				  }			
			
				r[q] = wext;
				
			}
		
		
		}
				
		for ( q = 1; q <= M; q++)
			{	
			
		fprintf(fp, "%c", r[q] );	
			}
	}
	
	fclose(fp);						
}

/* end of main program */