Java & JavaScript


Home
Applets
   3D:
 · Würfel
 · Würfel 2
 · Würfel 3
 · Tetraeder
 · Tetraeder 2
 · Dodekaeder
 · Ikosaeder
 · Fußball
 · Kugel
 · Kugel 2
   Fraktale:
 · Apfelmännchen
 · Apfelmännchen 2
 · Apfelmännchen 3
 · Apfelmännchen MA
 · Apfelmännchen Zoom
 · Apfelmännchen Zoom 2
 · Juliamenge
 · Juliamenge MA
 · Julia-Generator
 · Koch-Kurve
 · Koch-Kurve 2
 · Hilbert-Kurve
 · Sierpinski-Dreieck
 · Sierpinski-Dreieck 2
 · Sierpinski-Dreieck 3
 · Sierpinski-Teppich
 · Pythagoras-Baum
 · Lindenmayer-System
 · Lindenmayer-System 2
   Mathematik:
 · Funktionsplotter
 · Eratosthenes-Sieb
 · Miller-Rabin-Test
   Verschiedenes:
 · Morsezeichen-Ticker
 · Analoguhr
Scripts
Gäste
Kontakt



Peitgen/Jürgens/Saupe: Bausteine des Chaos. Fraktale
- Anzeige -


- Applets : Fraktale : Apfelmännchen Zoom -


Das fraktale Apfelmännchen als Java-Applet mit Zoom-Funktion

Beim Zoom ins Apfelmännchen kommt besonders schön die sogenannte Selbstähnlichkeit, als eines der fraktalen Grundmerkmale zum Vorschein. Egal wo und wie tief man in den Randbereichen der Apfelmännchen sucht, (fast) überall finden sich immer wieder neue Apfelmännchen.

[Das fraktale Apfelmännchen mit Zoom-Funktion als Java-Applet zum Download (Mandelbrot Set Zoom). Das fraktale Apfelmännchen-Zoom-Applet lässt sich allerdings nur mit aktiviertem Java betrachten !]

Ein linker Mausklick auf das Applet vergrößert das Apfelmännchen, ein rechter verkleinert es.
Die angeklickte Koordinate erscheint genau in der Mitte.
Reset mittels der F12-Taste.


Apfelmaennchen_Zoom.java

import java.awt.*;
import java.applet.*;
import java.util.*;

public class Apfelmaennchen_Zoom extends Applet {

    double unit = 0.007; // Auflösung eines Pixels
    double x_0 = -2.0;   // linker Rand des Apfelmännchens
    double y_0 = -1.3;   // oberer Rand
    int iterations = 50;
    static long zoom = 1;

    Image buffer;
    Graphics gBuffer;

    public void init() {
        setBackground(new Color(255,255,255));
    }

    // Zoom-Funktion
    public boolean mouseDown(Event ev, int xDown, int yDown) {
        buffer = null;

        if (yDown < 370) {
            double unit_old = unit;

            if (!ev.metaDown()) {
                if (iterations == 3880760) return true; // Maximum
                unit *= 0.5;
                iterations = (int)(iterations*1.3);
                zoom *= 2;
            }
            else if (ev.metaDown()){
                if (zoom < 2) return true;
                unit *= 2;
                iterations = (int)(iterations/1.3+0.5);
                zoom *= 0.5;
            }

            x_0 = x_0-(200-xDown)*unit + (unit_old - unit) * xDown;
            y_0 = y_0-(185-yDown)*unit + (unit_old - unit) * yDown;

            repaint();
        }
        return true;
    }

    public boolean keyDown(Event ev, int key) {
        // Alles zurücksetzen
        if (key==Event.F12) {
            unit = 0.007;
            x_0 = -2.0;
            y_0 = -1.3;
            iterations = 50;
            zoom = 1;

            buffer = null;
            repaint();
        }
        return true;
    }

    // C-Werte checken nach Zn+1 = Zn^2 + C.
    public int checkC(double reC,double imC) {
        double reZ=0, imZ=0, reZ_minus1=0, imZ_minus1=0;
        int i;

        for (i=0; i<iterations; i++) {
            imZ = 2*reZ_minus1*imZ_minus1+imC;
            reZ = reZ_minus1*reZ_minus1-imZ_minus1*imZ_minus1+reC;
            if (reZ*reZ+imZ*imZ > 4) return i;
            reZ_minus1 = reZ;
            imZ_minus1 = imZ;
        }
        return i;
    }

    // Apfelmännchen zeichnen
    public void paint (Graphics g) {
        if (buffer!=null) {
            g.drawImage (buffer, 0, 0, this);
            return;
        }
        buffer = createImage(this.getSize().width, this.getSize().height);
        gBuffer = buffer.getGraphics();

        double reC, imC;
        int x,y;

        imC = y_0; // oberer Rand
        for (y=0;y<370;y++) {
            reC = x_0; // linker Rand
            for (x=0;x<400;x++) {
                if(x==0 || x==399 || y==0 || y == 369)
                    gBuffer.setColor(new Color(100,100,100));
                else if(checkC(reC,imC)==iterations)
                    gBuffer.setColor(new Color(0,0,180));
                else gBuffer.setColor(new Color(0,200,250));

                gBuffer.drawLine(x,y,x,y);

                reC = reC+unit;
            }

            g.drawImage (buffer,0,0,this);

            imC = imC+unit;
        }
    }
}


Download  Apfelmaennchen_Zoom.zip (Mit Quellcode ca. 3 kb)




© 2001-2004 Albert Kluge - Alle Rechte vorbehalten
Impressum | Datenschutz | Nutzung | eMail