import java.applet.*; import java.awt.*; public class MandelbFinder extends Applet{ Mandelb_F w; public void init(){ setLayout(new BorderLayout()); add("Center",new Button("Mandelbrot Finder")); w=new Mandelb_F("Mandelb_F"); } public boolean action(Event e,Object o){ w.init(); return true; } } class Mandelb_F extends Frame{ mbf_Controls controls; public Mandelb_F(String t){ setTitle(t); } public void init(){ setLayout(new BorderLayout()); mbfCanvas c=new mbfCanvas(); add("Center",c); add("South",controls=new mbf_Controls(c)); show(); Dimension d=getToolkit().getScreenSize(); resize(409,484); } public void start(){ controls.enable(); } public void stop(){ controls.disable(); } public boolean handleEvent(Event e){ if(e.id==Event.WINDOW_DESTROY){ dispose(); } return true; } } class mbfCanvas extends Canvas{ double dxx=0.0,dyy=0.0,daa=2.0; int xx,yy,aa; boolean filled=true; public void paint(Graphics g){ int hx,hy; double xxx=xx-200; double yyy=yy-200; double x=xxx/100-dxx; double y=yyy/100-dyy; double a=(aa/100)*daa/4; double zr,zi,z,p,r,hz; for(double j=-1.0/a+y;j<1.0/a+y;j=j+0.005/a){ for(double i=-1.0/a+x;i<1.0/a+x;i=i+0.005/a){ hx=(int)(200-200*x*a+i*200*a); hy=(int)(200-200*y*a+j*200*a); hz=(int)(Math.round((1000/3)*(Math.log(a))/(Math.log(10))+500)); zr=0;zi=0; for(int k=0;k<=hz;k++){ z=zr*zr-zi*zi+i; p=2*zr*zi+j; r=z*z+p*p; if(r>=4&&k<=hz){ g.setColor(new Color((int)(125*Math.round(Math.sin(15*3.14*(k*3-90)/180)+1)), (int)(125*Math.round(Math.sin(15*3.14*k*3/180)+1)), (int)(125*Math.round(Math.sin(15*3.14*(k*3+90)/180)+1)))); g.fillRect(hx,hy,1,1); break; }else if(r<4&&k==hz){ g.setColor(new Color(0,0,0)); g.fillRect(hx,hy,1,1); } zr=z;zi=p; } } } } public boolean mouseDown(Event e,int dx,int dy){ dxx=(200-dx)/(daa*100)+dxx; dyy=(200-dy)/(daa*100)+dyy; daa=daa+daa; repaint(); return true; } public void redraw(boolean filled,int xpp,int ypp,int app){ this.filled=filled; this.xx=xpp; this.yy=ypp; this.aa=app; repaint(); } } class mbf_Controls extends Panel{ mbfCanvas canvas; public mbf_Controls(mbfCanvas canvas){ this.canvas=canvas; add(new Button("start")); } public boolean action(Event ev,Object arg){ Button b=(Button)ev.target; if("start".equals(b.getLabel())){ String label=(String)arg; canvas.redraw(label.equals("start"),200,200,100); } return true; } }