/* Victor Wu Mr. Carter DCC OAO Period 6 December 8, 2000 Victor's Purple Page - Julia set applet Description This applet paints a Julia set. If a user clicks the Draw button, a method inside the DrawButtHandler class will be called. This method will retrieve the coordinates from the two text fields and call Julia's drawJulia method to draw the Julia set with the coordinates. */ import java.awt.*; import java.awt.event.*; import java.applet.*; public class Julia extends Applet { private static final int RADIUS_IN_PIXELS = 100; private static final int RADIUS_IN_UNITS = 2; public Panel mainPanel; public TextField xField; public TextField yField; public GetCoorHandler coorHandler; public void init() { removeAll(); coorHandler = new GetCoorHandler(this); addMouseListener(coorHandler); xField = new TextField("0.0"); yField = new TextField("0.0"); Button drawButt = new Button("Draw"); drawButt.addActionListener(new DrawButtHandler(this)); Panel bottomPanel = new Panel(); bottomPanel.setBackground(Color.white); bottomPanel.add(new Label("x")); bottomPanel.add(xField); bottomPanel.add(new Label("y")); bottomPanel.add(yField); bottomPanel.add(drawButt); setLayout(new BorderLayout()); mainPanel = new Panel(); mainPanel.setBackground(Color.white); add(bottomPanel, BorderLayout.SOUTH); add(mainPanel, BorderLayout.CENTER); validate(); } public void drawJulia(double xK, double yK) { double xCoor, yCoor; for (int xPixel = 0; xPixel < RADIUS_IN_PIXELS * 2; xPixel++) { xCoor = -1.0 * RADIUS_IN_UNITS + xPixel * (1.0 * RADIUS_IN_UNITS / RADIUS_IN_PIXELS); for (int yPixel = 0; yPixel < RADIUS_IN_PIXELS * 2; yPixel++) { yCoor = RADIUS_IN_UNITS - yPixel * (1.0 * RADIUS_IN_UNITS / RADIUS_IN_PIXELS); double realVal, imgVal, a, b, size; a = xCoor; b = yCoor; realVal = a * a - b * b + xK; imgVal = 2 * a * b + yK; size = Math.sqrt(Math.pow(realVal - xK, 2.0) + Math.pow(imgVal - yK, 2.0)); int times = 1; while (size < RADIUS_IN_UNITS && times <= 30) { a = realVal; b = imgVal; realVal = a * a - b * b + xK; imgVal = 2 * a * b + yK; size = Math.sqrt(realVal * realVal + imgVal * imgVal); times++; } Graphics g = mainPanel.getGraphics(); switch (times) { default : g.setColor(Color.white); break; case 1 : g.setColor(new Color(140, 0, 140)); break; case 2 : g.setColor(new Color(0, 0, 125)); break; case 3 : g.setColor(new Color(140, 0, 140)); break; case 4: g.setColor(new Color(0, 0, 125)); break; case 5 : g.setColor(new Color(160, 0, 160)); break; case 6 : g.setColor(new Color(0, 0, 145)); break; case 7 : g.setColor(new Color(160, 0, 160)); break; case 8 : g.setColor(new Color(0, 0, 145)); break; case 9 : g.setColor(new Color(180, 0, 180)); break; case 10 : g.setColor(new Color(0, 0, 165)); break; case 11 : g.setColor(new Color(180, 0, 180)); break; case 12 : g.setColor(new Color(0, 0, 165)); break; case 13 : g.setColor(new Color(200, 0, 200)); break; case 14 : g.setColor(new Color(0, 0, 185)); break; case 15: g.setColor(new Color(200, 0, 200)); break; case 16 : g.setColor(new Color(0, 0, 185)); break; case 17: g.setColor(new Color(220, 0, 220)); break; case 18 : g.setColor(new Color(0, 0, 205)); break; case 19 : g.setColor(new Color(255, 0, 0)); break; case 20 : g.setColor(new Color(0, 0, 205)); break; case 21 : g.setColor(new Color(240, 0, 240)); break; case 22 : g.setColor(new Color(0, 0, 205)); break; case 23 : g.setColor(new Color(240, 0, 240)); break; case 24 : g.setColor(new Color(0, 0, 205)); break; case 25 : g.setColor(new Color(240, 0, 240)); break; case 26 : g.setColor(new Color(0, 0, 225)); break; case 27 : g.setColor(new Color(240, 0, 240)); break; case 28 : g.setColor(new Color(255, 0, 225)); break; case 29 : g.setColor(new Color(255, 0, 255)); break; case 30 : g.setColor(new Color(0, 0, 245)); break; case 31 : g.setColor(new Color(0, 255, 0)); break; } g.drawOval(xPixel, yPixel, 1, 1); } } } }