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.