Vorbemerkung
Vor diesem Abschnitt sollten Sie zuerst die Einführung in die Rekursion lesen.
Ergebnis der swf-Datei
Die Funktion wird rekursiv definiert. Im Anweisungblock wird die Funktion zweimal rekursiv aufgerufen.
Das Prinzip der Rekusion
Der Programmcode ohne Erklärungen
Codeabschnitte, die sich nicht vom vorigen Arbeitsschritt unterscheiden, werden grau geschrieben.
// BÜHNENRECHTECK
MIT FARBE FÜLLEN UND KONTURIEREN |
Der Programmcode mit Erklärungen
Ausgangspunkt festlegen und rekursive Funktion binaryTree aufrufen
var point = new Array(); |
Die Mitte der oberen Bühnenkante wird als Ausgangspunkt festgelegt.
Der Baum wird ausgehend von diesem Punkt mit der Höhe 200 und Breite
300 für die Ausgangsbasiskurve in rot und mit 1 Pixel Strichstärke
gezeichnet.
Definition der Basiskurve
Ausgangspunkt ist der Punkt pt (implementiert
als Array) mit den Koordinaten pt.x und
pt.y (in der Grafik x | y).
Die Basisbaum mit einem Stamm und zwei Ästen wird entsprechend der
Grafik gezeichnet, wobei einmal der Stift mit
moveTo von (x | y+a/4) nach (x-b/2 | y+a) springt.
Abschließend werden die Endpunkte der beiden Äste als Array abgespeichert
und in einem weiteren Array zuückgegeben.
D.h. zuückgegeben wird ein Array mit zwei
Elementen, die wiederum Arrays sind (geschachteltes Array).
function baseCurve(pt:Array, a:Number,
b:Number):Array { |
Definition der Funktion für den binären Baum
Eingabeparamter von der Funktion binaryTree sind der Ausgangspunkt pt, Höhe a und Breite b des Basisbaums, sowie die Anfangsstrichstärke lineWidth und -farbe lineColor.
Nur wenn Höhe a und Breite b des Basisbaums über den fixen Grenzwerten 3 und 2 liegen, wird ein neuer Teilbaum gezeichnet.
Zuerst wird der Linienstil festgelegt und der Zeichenstift beim Ausgangspunkt
positioniert.
Anschließend wird durch den Aufruf der Funktion
baseCurve der Basisbaum mit Höhe
a und Breite b gezeichnet.
Die Funktion gibt ein Array mit den zwei Endpunkten zurück, das unter
dem Array pts abgespeichert wird.
D.h mit var
pts:Array = baseCurve(pt, a, b); wird eine Variable vom Typ
Array definiert, der gleich das Ergebnis des Funktionsaufrufs baseCurve(pt,
a, b); als Wert zugewiesen wird.
Zuletzt wird zweimal rekursiv die Funktion binaryTree mit neuen Eingabewerten aufgerufen:
function binaryTree(pt:Array,
a:Number, b:Number, lineWidth:Number, lineColor:Number):Void { |
Variation
Auch in diesem Beispiel kann man durch gezieltes Variieren von Strichstärke und -farbe zusätzliche Effekte erzielen:
Bei den rekursiven Aufrufen wird die Linienstärke um 10% reduziert (*0.9) und die Farbe schrittweise heller und in Richtung Gelb (+0x0F1F00) verschoben.
binaryTree(pts[0], a/2, b/2, lineWidth*0.9,
lineColor+0x0F1F00); |
Funktionsaufruf mit Linienstärke 8 und einem Braunton (= dunkles Rot):
binaryTree(point, 200, 300, 8, 0x990000); |