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 : Pythagoras Baum -


Ein fraktaler Baum aus Quadraten und rechtwinkligen Dreiecken als Java-Applet.

Ein linker bzw. rechter Mausklick auf das Applet lässt den Pythagoras-Baum wachsen oder schrumpfen.

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


Pythagoras.java

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

public class Pythagoras extends Applet {

    Point a1,b1,c1,d1, a2,b2,c2,d2;

    int depth = 5; // Iterationstiefe Startwert

    Graphics g;
    Graphics2D g2;

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

    public boolean mouseDown(Event ev, int x, int y) {
        if (!ev.metaDown()) depth += 1;
        else if (depth>0) depth -= 1;
        repaint();
        return true;
    }

    public void paint(Graphics g) {
        g2 = (Graphics2D) g; // Anti-Aliasing
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
		RenderingHints.VALUE_ANTIALIAS_ON);

        drawTree(g2, new Point(200,0), new Point(250,0),
		new Point(250,50), new Point(200,50), depth); // Start-Quadrat
    }


    public void drawTree(Graphics2D g2, Point a, Point b, Point c, Point d, int depth) {

        // a,b,c,d sind die Punkte des jeweiligen Quadrats (gegen den Uhrzeigersinn)

        if (depth==0) return; // Astende erreicht
        depth -= 1;

        // Quadrat-Koordinaten bestimmen und zeichnen
        int xCoords[] = {a.x, b.x, c.x, d.x};
        int yCoords[] = {300-a.y, 300-b.y, 300-c.y, 300-d.y};

        g2.setColor(new Color(150-5*depth,150-5*depth,50)); // Baumfarbe variieren
        g2.drawPolygon(xCoords, yCoords, 4);

        // Neuen Basispunkt e für a oder b des nächsten Quadrats bestimmen
        double r1 = 0.2 + Math.random()*0.6; // Damit jeder Baum anders aussieht
        double r2 = Math.sqrt(0.5*0.5-(0.5-r1)*(0.5-r1)); // Satz des Pythagoras
        Point e = new Point((int)(d.x + r1*(c.x-d.x) + r2*(a.y-b.y)),
		(int)(d.y + r1*(c.y-d.y) + r2*(b.x-a.x)));

        // Neues Quadrat links
        a1 = d;
        b1 = e;
        c1 = new Point(b1.x+a1.y-b1.y, b1.y+b1.x-a1.x);
        d1 = new Point(a1.x+a1.y-b1.y, a1.y+b1.x-a1.x);
        drawTree(g2, a1, b1, c1, d1, depth);

        // Neues Quadrat rechts
        a2 = e;
        b2 = c;
        c2 = new Point(b2.x+a2.y-b2.y, b2.y+b2.x-a2.x);
        d2 = new Point(a2.x+a2.y-b2.y, a2.y+b2.x-a2.x);
        drawTree(g2, a2, b2, c2, d2, depth);
    }
}

Die Idee zu diesem Baum (1957) wird dem Niederländer A. E. Bosman (1891-1961) zugeschrieben (?). Allerdings ohne das hier implementierte Zufallsmoment.

Beim Testen verschiedener Algorythmen zur Berechnung des jeweils neuen Punktes 'e' entstanden überings die seltsamsten Gewächse und Gebilde. Hier ist noch Platz für eigene Experimente.


Pythagoras von Samos

(Pythagoras von Samos, 569-475 v. Chr., mit seinem Baum.)


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




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