/*********************************************************************************************/
/*                                                                                           */
/*  Java Image Demo - Fractals Pattern                                                       */
/*  Auth: bkenwright@xbdev.net                                                               */
/*  URL: www.xbdev.net                                                                       */
/*                                                                                           */
/*  Re-write: Ben Kenwright (bkenwright@xbdev.net                                            */
/*  Original Auth: Java Julia by MN Karthik                                                  */
/*                                                                                           */
/*********************************************************************************************/


import java.awt.Graphics;
import java.awt.Color;
import java.awt.Font;
import java.awt.*;
import java.applet.Applet;

public class fractals extends java.applet.Applet 
{
   Image img;
   Graphics backg;

   public void paint(Graphics g) 
   {
      g.drawImage( img , 0, 0, this );
   }// End of paint(..)
   
   public void init()
	 {
	    int width = getSize().width;
      int height = getSize().height;
	    img = createImage(width, height );
	    backg = img.getGraphics();
	    
	    
      int sx=width;           //Screenwidth
      int sy=height;          //Screenheight
      double xmin=-2;         //smallest real value (x-axis)
      double xmax=1.25;       //largest real value (x-axis)
      double ymin=-1.25;      //smallest imaginary value (y-axis)
      double ymax=1.25;       //largest imaginary value (y-axis)
      double maxiter=512;     //Max number of iterations

      double old_x;           //temporary variable to store x-value
      double fx,fy;
      double ix=0.42;
      double iy=0.23;
      int m;                  //variable to store number of iterations

      double dx=(xmax-xmin)/sx; //how much to add for each x-pixel?
      double dy=(ymax-ymin)/sy; //how much to add for each y-pixel?

      int px;                 //Variable storing current x-pixel
      int py=0;               //Variable storing current y-pixel
      double x;               //Variable storing current x-value
      double y=ymin;          //Variable storing current y-value

   
	    while (py<sy) 
	    {
         px=0;
         x=xmin;
         py++;
         while (px<sx) 
			   {
            px++;

            fx=x;
            fy=y;
            m=0;
            do 
				    {
               old_x=fx;
               fx= fx*fx - fy*fy + ix;
               fy= 2*old_x*fy + iy;
               m++;
            } 
			      while (((fx*fx+fy*fy)<4) && (m<maxiter));
			
	          if (m%2==0)  backg.setColor(Color.white);
	          if (m%3==0)  backg.setColor(Color.green);
	          if (m%4==0)  backg.setColor(Color.blue);
	          if (m%5==0)  backg.setColor(Color.red);
	          if (m%6==0)  backg.setColor(Color.yellow);
	          if (m%7==0)  backg.setColor(Color.cyan);
	          if (m%8==0)  backg.setColor(Color.magenta);
	          if (m%9==0)  backg.setColor(Color.orange);
	          if (m%10==0) backg.setColor(Color.pink);
	          if (m%11==0) backg.setColor(Color.gray);
	          if (m%12==0) backg.setColor(Color.red);
	          if (m%13==0) backg.setColor(Color.black);	
            backg.drawLine(px-3,py-3,px+10,py+10);
            x+=dx;
         }
         y+=dy;
     }
     
     backg.setColor(Color.black);
     backg.drawString("Wonderful Fractal Image (www.xbdev.net)", 30, 30);
  }// End of init(..)
  
}// End of applet
