Beispiel: Star
Die im Folgenden dargestellten Fraktale wurden ohne die Prozeduren "fd" und "rt" realisiert. Zu beachten ist der rekursive Aufruf der verwendeten Prozeduren. Ein Quadrat wird durch die Koordinaten des Mittelpunktes (x/y) und durch die halbe Seitenlänge c bestimmt. Dadurch sind die Koordinaten der Eckpunkte festgelegt, sodass das Quadrat mit der rectangle-Mehodte gezeichnet werden kann.
Die Rekursion besteht nun beispielsweise darin, an allen vier Eckpunkten des Quadrates weitere Quadrate mit der halben Seitenlänge c/2 zu zeichnen. Die Rekursion bricht ab, wenn die halbe Seitenlänge des Quadrates kleiner als 1 wird.
procedure TForm1.star(l,x,y:real); begin if l>1 then begin star(l/2,x-l,y+l); star(l/2,x+l,y+l); star(l/2,x-l,y-l); star(l/2,x+l,y-l); image1.canvas.rectangle(round(x-l),round(y-l), round(x+l),round(y+l)); end; end;
Aufgabe: Untersuche das Verhalten der Rekursion, wenn der rectangle-Befehl vor den Prozeduraufrufen steht!
Aufgabe: Ersetze das Quadrat durch ein Rechteck, sodass die rekursiv erzeugte Struktur den
ganzen Bildschirm ausfüllt!
Aufgabe: Bilde eine analoge Rekursion mit Hilfe von Kreisen!
Beispiel: Dreieck
Dreiecke eigenen sich ebenfalls sehr gut für Fraktale. Im folgenden Programmausschnitt wird ein rechtwinkliges Dreieck durch die Koordinaten (x/y) der Spitze und durch die Grundlinie 2c (Höhe c) festgelegt. Deshalb erhalten die Endpunkte der Basis die Koordinaten (x-c/y+c) bzw. (x+c/y+c). Die Rekursion fügt zwei Dreiecke halber Größe mit den Spitzen in den beiden Endpunkten der Basis an:
procedure TForm1.Dreieck(c,x,y:real); begin if c>1 then begin Dreieck(c/2,x-c,y+c); Dreieck(c/2,x+c,y+c); Image1.Canvas.MoveTo(round(x),round(y)); Image1.Canvas.LineTo(round(x-c),round(y+c)); Image1.Canvas.LineTo(round(x+c),round(y+c)); Image1.Canvas.LineTo(round(x),round(y)); end; end;
Beispiel: Das Sierpinsky-Dreieck
Zeichnet man drei Dreiecke halber Größe in das gegebene Dreieck ein und in die so entstandenen Dreiecke wieder (rekursiv...), erhält man das Sierpinsky-Dreieck:
Beispiel: Der "Menger-Schwamm"
Hier erstellen wir gleichsam einen Schnitt durch den räumlichen Menger-Schwamm (vgl. Mathematiklehrbuch von Reichel,Müller,Hanisch). Quadrate, deren Seitenlänge auf ein Drittel verkürzt wird, werden 8 mal in das ursprüngliche Quadrat eingefügt, usw.
Bemerkung:
Input-Box
Eingaben durch den Benutzer kann man unter Ausgabe einer Überschrift und einer Zeile erklärenden Texts mit der Methode "Inputbox" codieren:
abbruch:=StrToInt(Inputbox('Quadrat-Umrissteile', 'Bis zu welcher Strecke?','5'));
Aufgaben:
Erstelle ein kleines Delphi-Programm, mit dem das unten dargestellte Fraktal gezeichnet
werden kann!
Verwende auch andere geometrische Strukturen bzw. andere "Pfade", entlang derer die
kleiner werdende Figur gezeichnet wird.
Aufgabe: Erweitere das obige Projekt so, dass fraktale Strukturen in mehreren Richtungen auftreten:
Aufgaben:
1.Ein (großer) Kreis soll durch immer kleiner werdende Kreise ausgefüllt werden.
2.Um ein Dreieck sollen seinem Umfang entlang immer kleiner werdende Dreiecke angereiht werden.
3.Ein Rechteck soll durch immer kleiner werdende Rechtecke ausgefüllt werden.
4.Ein Kreis soll ähnlich wie der "Menger-Schwamm" durch kleiner werdende Kreise ausgefüllt werden.