7.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 Aufruf der Methode 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 Turle wieder in den Ausgangspunkt gesetzt.
 
Die Klasse Pythagoras Baum.java
   public void zeichneQuadrat(double l){

      for(int i=0;i<4;i++){

         forward(l);

         right(90);

      }

   }

 
   public void zeichnePythagorasBaum(double l){

      zeichneQuadrat(l);

      if(l>1){

         forward(l);

         left(30);

         zeichnePythagorasBaum(l*0.5*Math.sqrt(3));

         right(90);

         forward(l*0.5*Math.sqrt(3));

         zeichnePythagorasBaum(l/2);

         forward(-l*0.5*Math.sqrt(3));

         left(60);

         forward(-l);

      }

   }

zu 7.6 Übungen
zur Startseite www.pohlig.de  (C) MPohlig 2005