A.3.5
Pythagoras Baum |
|
Erste Stufe | In der
ersten Stufe hat der Pythagoras-Baum die folgende Gestalt:
Man gibt ein Quadrat mit einer bestimmten Seitenlänge vor. Über der einen Seite zeichnet man ein rechtwinkliges Dreieck (in unserem Beispiel hat dieses die Winkel 300 und 600). Über die noch freien Katheten zeichnet man die Kathetenquadrate. Es entsteht die bekannte Darstellung zum Pythagoräischen Lehrsatz. Den Pythagoras-Baum erhält man nun, wenn man die Kathetenquadrate selbst wieder als Hypothenusenquadrate für die nächste Generation auffasst. Wir erhalten dann das nächste Bild. Wichtig ist anzumerken, dass das kleinere Kathetenquadrat keine nachfolgende Generation erzeugt, da seine Länge die Abbruchbedingung der Rekursion erreicht. Die Abbruchbedingung wird über die Seitenlänge des linken Kathetenquadrats festgelegt. Setzten wir diese niedriger, erhöhen wir die Rekursionstiefe. Die nächste Generationen lieferen aber immer noch nur weitere Generationen für das linke Kathetenquadrat. Erst wenn die Rekursionstiefe genügend groß ist, erscheinen in der grafischen Darstellung auch Nachfolgegenerationen für die rechten Kathetenquadrate: |
Es
handelt sich in unseren Darstellungen noch nicht um den Pythagoras-Baum,
Den erhalten wir erst, wenn wir die Darstellung idealisieren, genauer,
wenn wir uns die Rekursionstiefe unendlich "vorstellen".
Einen Eindruck
von der Figur bekommen wir, wenn wir die (in Programmen immer endlichen)
Rekursionstiefe sehr groß machen, z.B. so, dass erst dann keine weitere
Generationen erzeugt werden, wenn die Seitenlönge des linken Quadrats ein
Pixel unterschreiten würde. Kommen wir also zu der Frage, wie
programmieren wir die Methode
zeichnen() in der Klasse
Pythagoras-Baum? |
|
Der Algorithmus |
Die
Methode zeichne()
in Umgangssprache: Die Turtle sitze im
Ausgangspunkt. Zuerst wir ein Quadrat gezeichnet. Danach bewegt sich die
Turtle auf den Punkt P_li, dreht ihre Blickrichtung um 300 nach
links (der dicke Pfeil gibt die Blickrichtung der Turtle an). Dann erfolgt
der rekursive Methodenaufruf
zeichnePythagorasBaum(l*0.5*
Math.sqrt(3));. Die Turtle bewegt
sich mit neuer Blickrichtung in den Punkt P_re. Wieder der rekursive
Aufruf der Methode
zeichnePythagorasBaum(l/2). Schließlich wird die Turtle wieder in den
Ausgangspunkt gesetzt. |
Die Klasse Pythagoras Baum.java |
|
zu | A.3.6 Übungen |
zur Startseite | www.pohlig.de (C) MPohlig 2007 |