/* * Paul Garrett, March 1999 * * Zoom in/out on Mandelbrot set * * Thread it so that viewer can see the picture paint itself */ import java.applet.*; import java.awt.*; public class Mandelbrot extends Applet { int size = 64; // power-of-2 int limit = 150; // number of iterations to count as "escape" final int numberColors = 10; final Color[] colors = { Color.gray, Color.gray, Color.blue, Color.red, Color.yellow, Color.magenta, Color.pink, Color.green, Color.orange, Color.black}; boolean queryComputed = false; int[][] colorIndices; double xCenter, yCenter, radius; TextField limitTF; TextField sizeTF; TextField xCenterTF; TextField yCenterTF; TextField radiusTF; public void init() { xCenter = -0.7; yCenter = 0.0; radius = 1.4; setLayout(null); xCenterTF = new TextField(10); xCenterTF.resize(new Dimension(100,30)); add( xCenterTF ); xCenterTF.move(350, 30); xCenterTF.setText(""+xCenter); yCenterTF = new TextField(10); yCenterTF.resize(new Dimension(100,30)); add( yCenterTF ); yCenterTF.move(350, 55); yCenterTF.setText(""+yCenter); radiusTF = new TextField(10); radiusTF.resize(new Dimension(100,30)); add( radiusTF ); radiusTF.move(350, 80); radiusTF.setText(""+radius); limitTF = new TextField(10); limitTF.resize(new Dimension(100,30)); add( limitTF ); limitTF.move(350, 200); limitTF.setText(""+ limit); sizeTF = new TextField(10); sizeTF.resize(new Dimension(100,30)); add( sizeTF ); sizeTF.move(350, 230); sizeTF.setText("" + size); } final double[] f(double[] z, double[] c) { double x = z[0]; double y = z[1]; double[] out = { x*x - y*y + c[0], 2*x*y + c[1]}; return out; } final double normSq(double[] z) { return z[0]*z[0]+z[1]*z[1]; } final double index(double cx, double cy) { double[] c = {cx,cy}; int ix = 0; double[] z = {0.0,0.0}; while (normSq(z) <= 4 && ix < limit) { //__EDIT__ z = f(z,c); ix++; } return Math.sqrt(((double) ix)/((double) limit)); } void initColorIndices(double xCenter, double yCenter, double radius) { for(int i=0; i 0 && e.y > 0) { xCenter = smooth(xCenter + radius*((double) (e.x-128))/128.0); yCenter = smooth(yCenter + radius*((double) (e.y-128))/128.0); xCenterTF.setText(""+xCenter); double y = -yCenter; yCenterTF.setText(""+y); radius = smooth(radius/1.4); radiusTF.setText(""+radius); reinit(); repaint(); return true; } else { return false; } } } /************************************************************/ // end of class "Mandelbrot" /************************************************************/