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

- Applets : Fraktale : Sierpinski-Teppich -


Der fraktale Sierpinski-Teppich als Java-Applet.

[Der fraktale Sierpinski-Teppich als Java-Applet mit Quellcode zum Download. Der fraktale Sierpinski-Teppich lässt sich allerdings nur mit aktiviertem Java betrachten !]

Das verwendete L-System Schema:
F, F -> F+F-F-FF-F-F-MF, M -> MMM, 90°


Sierpinski4.java

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

public class Sierpinski4 extends Applet {

    Point a, b; // Verbindungspunkte eines Einzelschritts

    int lengthF = 2;       // Schrittlänge Startwert
    double direction;      // Richtung in Grad
    double rotation = 90;  // Drehung in Grad

    int depth = 6;         // Iterationen Startwert

    Image buffer;
    Graphics gBuffer;
    Graphics g;

    public void init() {
        setBackground(new Color(250,150,0));
    }

    public void paint(Graphics g) {
        if (buffer!=null) {
            g.drawImage (buffer, 0, 0, this);
            return;
        }
        buffer = createImage(size().width,size().height);
	 gBuffer = buffer.getGraphics();

        gBuffer.setColor(new Color(255,255,255)); // Farbe

        a = new Point(0,0); // Start-Punkt
        direction = 45;     // Start-Richtung in Grad

        turtleGraphic(g, gBuffer, "F", depth);
    }


    public void turtleGraphic(Graphics g, Graphics gBuffer, String instruction, int depth) {

        if (depth==0) return;
        depth -= 1;

        Point aMark = new Point(0,0);
        double directionMark = 0;
        // Dummy-Werte

        int i;
        char c;

        for (i=0;i<instruction.length();i++) {

            c = instruction.charAt(i);

            // Schritt Vorwärts mit zeichnen
            if (c=='F' || c=='M') {

                // Produktionsregel iterieren, solange Tiefe nicht erreicht ist
                if (c=='F') turtleGraphic(g, gBuffer, "F+F-F-FF-F-F-MF", depth);
                else turtleGraphic(g, gBuffer, "MMM", depth);

                // Zeichnen: Ab 'a' in Richtung 'direction' einen Schritt der Länge 'lengthF'
                if (depth==0) {
                    double rad = 2*Math.PI/360 * direction; // Grad -> Radiant

                    int p = (int) Math.round(lengthF * Math.cos(rad));
                    int q = (int) Math.round(lengthF * Math.sin(rad));

                    b = new Point(a.x+p, a.y+q);

                    // Animations-Effekt
                    try {Thread.sleep(1);}
                    catch (InterruptedException e) {}

                    if (c=='F') {
                        gBuffer.drawLine(a.x, a.y, b.x ,b.y);
                        g.drawImage (buffer, 0, 0, this);
                    }

                    a = b; // Neuer Startpunkt
                }
            }

            // Drehung links herum
            else if (c=='+') direction += rotation;

            // Drehung rechts herum
            else if (c=='-') direction -= rotation;

            // Position und Richtung speichern
            else if (c=='[') {
                aMark = a;
                directionMark = direction;
            }

            // Zurück zu gespeicherter Position und Richtung
            else if (c==']') {
                a = aMark;
                direction = directionMark;
            }
        }
    }
}

Mehr zum Konstruktionsprinzip des Lindenmayer-Systems finden Sie unter L-System.


Download  Sierpinski_Teppich.zip (Applet und Code ca. 3 kb)




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