/*
 * Created: lunes, 11 de septiembre de 2006 22:19:34
 * Modified: lunes, 11 de septiembre de 2006 22:19:34
 */


//Programa que grafica z ^4 -1   	fractal de Julia
   import java.applet.Applet;
   import java.awt.*;
   import java.awt.event.*;

   public class Julia4 extends Applet implements MouseListener {
   
      private double scale = 1.0;
      public void init()
      {
         addMouseListener(this);
         resize(300,300);
      }
   
      public void paint(Graphics g)
      {
         int i=0,j=0;
      
         double a = 0.0;
         double b = 0.0;
         double d1 = 0.0;
         double d2 = 0.0;
         double d3 = 0.0;
         double d4 = 0.0;
      
      
         Complex z = new Complex (0,0);
         Complex r1 = new Complex(1.0,0.0);
         Complex r2 = new Complex(-1.0,0.0);
         Complex r3 = new Complex(0.0,1.0);
         Complex  r4= new Complex(0.0,-1.0);
      
         for(i=0; i<300; i++)
         {
            for(j=0; j<300; j++)
            {
               a = (i-150.0d)/(150.0*scale);
               b = (j-150.0d)/(150.0*scale);
            
               z.set(a,b);
               z = Newton(z);
            
               d1 = Math.sqrt(r1.add(z).normsqr());
               d2 = Math.sqrt(r2.add(z).normsqr());
               d3 = Math.sqrt(r3.add(z).normsqr());
               d4 = Math.sqrt(r4.add(z).normsqr());
            
            
               g.setColor(Color.black);
               g.fillRect(i,j,1,1);
            
               if( d1 <= 0.25) 
               { 
                  g.setColor(Color.yellow);
                  g.fillRect(i,j,1,1);
               }
            
               if( d2 <= .25 ) 
               { 
                  g.setColor(Color.red);
                  g.fillRect(i,j,1,1);
               }
            
               if( d3 <= .25 ) 
               { 
                  g.setColor(Color.blue);
                  g.fillRect(i,j,1,1);
               }
               if(d4<=.25)
               { 
                  g.setColor(Color.green);  // color para la otra raiz
                  g.fillRect(i,j,1,1);
               
               
               }	
            
            }
         }
      
      }  //fin public
   
      public static Complex Newton(Complex z)
      {
         int i = 0;
         Complex k = new Complex(-1,0);
         Complex w;
      
         for(i=0 ; i < 20; i++)
         {
         
            w = f(z);
            w = w.divide(fd(z));
            w = w.multiply(k);
            z = z.add(w);
         
         }
      
         return z;
      }
   
      public static Complex f(Complex z)
      {
      
         Complex k = new Complex(-1.0,0.0);
         Complex w; 
      
      
         w= z.multiply(z);    
         z = w.multiply(w);
         z = z.add(k);
      
      
         return z;
      }
   
   
      public static Complex fd(Complex z)
      {
      
         Complex k = new Complex(4,0);  //eleva a la cuatro
         Complex w;
      
         w = z.multiply(z);
         z = w.multiply(z);
         z = z.multiply(k);
      
         return z;
      
      }
   
   
      public void mousePressed(MouseEvent event) {        
         scale/=2;
         repaint();
      }
      public void mouseClicked(MouseEvent event) {
      }
      public void mouseReleased(MouseEvent event) {
      }
      public void mouseEntered(MouseEvent event) {
      }
      public void mouseExited(MouseEvent event) {
      }
   
   }







