import java.applet.*; import java.awt.*; public class Fraktal_Applet extends Applet { final int ITERATIONEN = 10000; final double FAKTOR = 5; final double OFFSET_X = 200; final double OFFSET_Y = 380; final int BREITE = 400; private double faktor = FAKTOR; private double offset_x = OFFSET_X; private double offset_y = OFFSET_Y; private int delta = BREITE; int iterationen; private int start_x; private int ende_x; private int start_y; private int ende_y; int dev_x, dev_y; boolean neues_fenster; private int regel_system = 0; private Graphics g; private Rectangle r; Punkt p = new Punkt (); private Color current_color = Color.black; private Button clear_button; private Button start_button; private Choice regel_choices; void reset_graphics(){ g = this.getGraphics(); r = this.bounds(); g.setColor(Color.black); g.fillRect(r.x, r.y, r.width, r.height); g.setColor(Color.green); } void reset_parameters() { faktor = FAKTOR; offset_x = OFFSET_X; offset_y = OFFSET_Y; delta = BREITE; neues_fenster = false; } public void init() { // initialisiere Applet setBackground(Color.black); // setze Hintergrundfarbe regel_choices = new Choice(); // Menu fuer Regeln regel_choices.addItem("Farn"); regel_choices.addItem("Sierpinski"); regel_choices.addItem("Blatt"); regel_choices.addItem("Wuerfel"); regel_choices.setBackground(Color.lightGray); regel_choices.setForeground(Color.black); this.add(regel_choices); start_button = new Button("Start"); // lege Pushbutton an start_button.setForeground(Color.black); start_button.setBackground(Color.lightGray); this.add(start_button); clear_button = new Button("Reset"); // lege Pushbutton an clear_button.setForeground(Color.black); clear_button.setBackground(Color.lightGray); this.add(clear_button); reset_parameters(); } public boolean mouseDown(Event e, int x, int y) // aufgerufen { // bei Mausdruck start_x = x; start_y = y; ende_x = start_x + 1; ende_y = start_y + 1; g=this.getGraphics(); g.setXORMode(Color.red); return true; } public boolean mouseDrag(Event e, int x, int y) // beim Mausziehen { g.drawLine(start_x, start_y, ende_x, start_y); // altes Zoomrechteck g.drawLine(start_x, start_y, start_x, ende_y); // entfernen g.drawLine(start_x, ende_y, ende_x, ende_y); g.drawLine(ende_x, start_y, ende_x, ende_y); int dis_x = x - start_x; // kleinere Distanz int dis_y = y - start_y; // bzgl. x oder y delta = dis_x < dis_y ? dis_x : dis_y ; // legt Quadrat fest ende_x = start_x + delta; ende_y = start_y + delta; g.drawLine(start_x, start_y, ende_x, start_y); // neues Zoomrechteck g.drawLine(start_x, start_y, start_x, ende_y); // malen g.drawLine(start_x, ende_y, ende_x, ende_y); g.drawLine(ende_x, start_y, ende_x, ende_y); return true; } public boolean mouseUp(Event e, int x, int y) // aufgerufen bei { // Maustaste loslassen faktor = BREITE * faktor / delta; offset_x = BREITE * (offset_x-start_x) / delta; offset_y = BREITE * (offset_y-start_y) / delta; g.setPaintMode(); neues_fenster = true; return true; } public boolean action(Event event, Object arg) { // bei Button-Druck int i, j; if (event.target == clear_button) { // bei Clear-Button reset_parameters(); reset_graphics(); return true; } else if (event.target == regel_choices) { // bei Regel-Menu String colorname = (String) arg; if (arg.equals("Farn")) regel_system = 0; else if (arg.equals("Sierpinski")) regel_system = 1; else if (arg.equals("Blatt")) regel_system = 2; else if (arg.equals("Wuerfel")) regel_system = 3; reset_parameters(); reset_graphics(); return true; } else if (event.target == start_button) { // bei Start-Button g = this.getGraphics(); g.setColor(Color.green); if (neues_fenster) { reset_graphics(); neues_fenster = false; } iterationen = ITERATIONEN; while (iterationen-- > 0) { IFS.transform (p); dev_x = (int) (faktor * p.x + offset_x); dev_y = (int) (offset_y - faktor * p.y); g.drawLine(dev_x, dev_y, dev_x, dev_y); } return true; } else return super.action(event, arg); // sonst: Superklasse } }