import java.awt.*; import java.applet.*; public class MF extends Applet{ Mandel_F f; public void init(){ setLayout(new BorderLayout()); add("Center",new Button("Mandel_F")); f=new Mandel_F("Mandel_F"); } public boolean action(Event e,Object o){ f.init(); return true; } } class Mandel_F extends Frame{ Mf_Controls controls; M_F w; public Mandel_F(String t){ setTitle(t); } public void init() { setLayout(new BorderLayout()); Mf_Canvas c = new Mf_Canvas(); w=new M_F("M_F"); add("Center", c); add("South", controls = new Mf_Controls(w)); show(); Dimension d=getToolkit().getScreenSize(); resize(509,584); } public void start(){ controls.enable(); } public void stop(){ controls.disable(); } public boolean handleEvent(Event e) { if (e.id == Event.WINDOW_DESTROY) { dispose(); } return false; } } class Mf_Canvas extends Canvas { int xx=25000; int yy=25000; int aa=1; Font font; public void paint(Graphics g) { int a=aa; int hx,hy; double xxx=xx/100-250; double yyy=yy/100-250; double x=xxx/200-0.75; double y=yyy/200; double zr,zi,z,p,r; for(double j=-1.25/a+y;j<1.25/a+y;j=j+0.005/a){ for(double i=-1.25/a+x;i<1.25/a+x;i=i+0.005/a){ hx=(int)(250-200*x*a+i*200*a); hy=(int)(250-200*y*a+j*200*a); zr=0;zi=0; for(int k=0;k<=100;k++){ z=zr*zr-zi*zi+i; p=2*zr*zi+j; r=z*z+p*p; if(r>=4&&k<=100){ g.setColor(new Color((int)(127*Math.round(Math.sin(3.14*(k*3-90)/180)+1)), (int)(127*Math.round(Math.sin(3.14*k*3/180)+1)), (int)(127*Math.round(Math.sin(3.14*(k*3+90)/180)+1)))); g.fillRect(hx,hy,1,1); break; }else if(r<4&&k==100){ g.setColor(Color.black); g.fillRect(hx,hy,1,1); break; } zr=z;zi=p; } } } g.setColor(Color.white); g.setFont(font); g.drawLine(0,0,500,0); g.drawLine(0,0,0,500); g.drawLine(500,500,0,500); g.drawLine(500,500,500,0); g.drawLine(0,400,500,400); g.drawLine(0,300,500,300); g.drawLine(0,200,500,200); g.drawLine(0,100,500,100); g.drawLine(400,0,400,500); g.drawLine(300,0,300,500); g.drawLine(200,0,200,500); g.drawLine(100,0,100,500); g.drawString("Xp="+xx,30,120); g.drawString("Yp="+yy,30,140); g.drawString("”{—¦F"+aa,30,160); g.drawString("Xp",450,10); g.drawString("Yp",5,460); g.drawString("0",5,10); g.drawString("10000",105,10); g.drawString("20000",205,10); g.drawString("30000",305,10); g.drawString("40000",405,10); g.drawString("50000",470,10); g.drawString("10000",5,110); g.drawString("20000",5,210); g.drawString("30000",5,310); g.drawString("40000",5,410); g.drawString("50000",5,495); g.setFont(new Font("TimesRoman",Font.BOLD,30)); String st="Mandel Finder"; Relief(g,st,20,50); } private void Relief(Graphics g,String s,int x,int y){ g.setColor(Color.white); g.drawString(s,x-1,y-1); g.setColor(Color.black); g.drawString(s,x+1,y+1); g.setColor(Color.red); g.drawString(s,x,y); } } class M_F extends Frame{ int xx,yy,aa; boolean filled=true; Font font; public M_F(String t){ setTitle(t); } public void init(){ Dimension d=getToolkit().getScreenSize(); resize(509,549); show(); } public boolean handleEvent(Event e){ if(e.id==Event.WINDOW_DESTROY){ dispose(); } return true; } public void paint(Graphics g){ int a=aa; int hx,hy,hz; double xxx=xx/100-250; double yyy=yy/100-250; double x=xxx/200-0.75; double y=yyy/200; double zr,zi,z,p,r; for(double j=-1.25/a+y;j<1.25/a+y;j=j+0.005/a){ for(double i=-1.25/a+x;i<1.25/a+x;i=i+0.005/a){ hx=(int)(250-200*x*a+i*200*a); hy=(int)(250-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)(127*Math.round(Math.sin(3.14*(k*3-90)/180)+1)), (int)(127*Math.round(Math.sin(3.14*k*3/180)+1)), (int)(127*Math.round(Math.sin(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); break; } zr=z;zi=p; } } } g.setColor(Color.white); g.setFont(font); g.drawString("Xp="+xx,20,20); g.drawString("Yp="+yy,20,40); g.drawString("”{—¦F"+aa,20,60); } 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 Mf_Controls extends Panel { TextField xp; TextField yp; TextField ap; M_F frame; public Mf_Controls(M_F frame) { this.frame = frame; add(new Label("Xp =",Label.RIGHT)); add(xp = new TextField("25000", 5)); add(new Label("Yp =",Label.RIGHT)); add(yp = new TextField("25000", 5)); add(new Label("”{—¦F",Label.RIGHT)); add(ap = new TextField("1",6)); add(new Button("•\ަ")); } public boolean action(Event ev, Object arg) { if (ev.target instanceof Button) { String label = (String)arg; frame.redraw(label.equals("•\ަ"), Integer.parseInt(xp.getText().trim()), Integer.parseInt(yp.getText().trim()), Integer.parseInt(ap.getText().trim())); frame.init(); return true; } return false; } }