Vorbemerkung
Vor diesem Abschnitt sollten Sie zuerst die Einführung in die Rekursion lesen.
Ergebnis der swf-Datei
Die Funktion wird rekursiv definiert und bei jedem rekusiven Aufruf ändert sich die Linienfarbe und -stärke.
Das Prinzip der Rekusion
Wenn man zu den Eingabeparametern für die Gesamtkurve auch die Linienfarbe und -stärke dazunimmt, kann man bei jedem rekursiven Aufruf auch die Farbe und Strichstärke neu definieren und so für die Gesamtkurve den Effekt erreichen, der im einleitenden Ergebnis der swf-Datei zu sehen ist.
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
Rekursive Deklaration der Funktion curve
function curve(pt:Array,
a:Number, b:Number, lineWidth:Number, lineColor:Number):Void { |
Eingabeparamter von der Funktion curve
sind der Ausgangspunkt pt,
Breite a und Höhe
b der Basiskurve, sowie die Anfangsstrichstärke
lineWidth und -farbe lineColor.
Zuerst wird der Linienstil festgelegt und der Zeichenstift beim Ausgangspunkt
positioniert.
Anschließend wird durch den Aufruf der Funktion
baseCurve die Basiskurve mit Breite
a und Höhe b gezeichnet.
Die Funktion gibt den Endpunkt zurück, der wieder unter
pt abgespeichert wird.
Wenn der Endpunkt der Basiskurve innerhalb der Bühne liegt, wird rekursiv die Funktion curve mit neuen Eingabewerten aufgerufen:
Variationen des rekursiven Aufrufs
Durch die Form des rekursiven Aufrufs lassen sich sehr elegant die Kurven
variieren.
Man könnte z.B. durch Vergrößern von
a die Wellenlinie schrittweise dehnen und durch Verkleinern von
b die Amplitude schrittweise dämpfen.
Man muss allerdings darauf achten, keine unendliche Rekursion wie in dem nachfolgenden Beispiel zu produzieren :
Hier wird die Breite a der Basiskurve in jedem rekursiven Aufruf um 10% verkleinert. Das führt dazu, dass die Basiskurven immer enger werden und die Bühne nie verlassen. Dadurch wird das Abbruchskriterium (außerhalb der Bühne zu liegen) nie erfüllt und es kommt zu einer unendlichen Rekursion. Man müsste in diesem Fall einen unteren Grenzwert für a als zusätzliches Abbruchskriterium einführen.
Wie die obige Fehlermeldung zeigt, erlaubt Flash nur 256 Rekursionsstufen und bricht das Programm ab.