//
// The Mandelbrot Fractal Set
// Copyright c Brian P. Vogl
// September 19 - 21, 2000
//
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class mandel extends Applet implements ActionListener
{ int rgb[] = {
0x000000, 0xA1A1A1, 0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF10, 0x52b552, 0x31b5d6,
0xffce9c, 0xbdc6de, 0xce007b, 0x527b10, 0xffb573, 0xbdc6de, 0xf7bdde, 0xffffff };
int xs=-1,ys=-1,xn=-1,yn=-1; // Mouse position variables
int maxcol = 640;
int maxrow = 350;
int maxcolor = rgb.length;
int maxiter = 512;
int maxsize = 4;
double Q[] = new double[350];
double Xmax, Xmin, Ymax, Ymin;
double P, delP, delQ, X, Y, Xsq, Ysq;
int i, color, row, col;
public void init()
{
addMouseListener(new MPListener());
addMouseMotionListener(new MMListener());
Xmax = 0.5d;
Xmin = -2.0d;
Ymax = 1.15d;
Ymin = -1.15d;
delP = (Xmax - Xmin)/maxcol;
delQ = (Ymax - Ymin)/maxrow;
Q[0] = Ymin;
for(row = 1; row < maxrow; row++)
Q[row] = Q[row-1] + delQ;
}
public void paint(Graphics gr) // Draw the set
{ P = Xmin;
for(col = 0; colxn) { x1=xn; w1=xs-xn; }
else { x1=xs; w1=xn-xs; }
if(ys>yn) { y1=yn; h1=ys-yn; }
else { y1=ys; h1=yn-ys; }
gr.drawRect(x1, y1, w1, h1);
}
xn = e.getX();
yn = e.getY();
if(xs>xn) { x1=xn; w1=xs-xn; }
else { x1=xs; w1=xn-xs; }
if(ys>yn) { y1=yn; h1=ys-yn; }
else { y1=ys; h1=yn-ys; }
gr.drawRect(x1, y1, w1, h1);
}
}
}
class MPListener extends MouseAdapter
{ public void mousePressed(MouseEvent e)
{ double maxtmp, mintmp;
int tmp, xe=-1, ye=-1;
if(xs == -1) xs=e.getX();
else xe=e.getX();
if(ys == -1) ys=e.getY();
else ye=e.getY();
if(xe == -1) return;
if(xs>xe) { tmp = xs; xs = xe; xe = tmp; }
if(ys>ye) { tmp = ys; ys = ye; ye = tmp; }
mintmp = ((Xmax - Xmin) * xs )/ maxcol + Xmin;
maxtmp = ((Xmax - Xmin) * xe )/ maxcol + Xmin;
Xmin = mintmp;
Xmax = maxtmp;
mintmp = ((Ymax - Ymin) * ys )/ maxrow + Ymin;
maxtmp = ((Ymax - Ymin) * ye )/ maxrow + Ymin;
Ymin = mintmp;
Ymax = maxtmp;
delP = (Xmax - Xmin)/maxcol;
delQ = (Ymax - Ymin)/maxrow;
Q[0] = Ymin;
for(row = 1; row < maxrow; row++)
Q[row] = Q[row-1] + delQ;
xs=-1; ys=-1; xn=-1; yn=-1;
repaint();
}
}
public void mouseReleased(MouseEvent e){}
public void actionPerformed(ActionEvent Event){}
}