|
- 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.
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, 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
|