|
|
Ein weiteres Beispiel für rekursive Grafiken stellt die Hilbertkurve dar. Diese Kurve hat die besondere
Eigenschaft, raumfüllend zu sein. In einem Quadrat kann die Rekursionstiefe so gewählt werden, das der Raum
vollständig ausgefüllt wird, ohne das die Kurve sich selbst schneidet. Die Vorgehensweise zur Konstruktion der
Hilbertkurve kann durch eine Grammatik beschrieben werden. Neben dem Initiator sind hier Generatoren zu finden,
die das Rekusionsmuster der indirekten Rekursion widerspiegeln.
Eine gute Beschreibung zu den Hilbertkurven findet man bei N. Wirth. Legt man mehrere
Kurven übereinander, erhält man nachstehendes Muster. Der Code für eine Implementierung
wird für den Generator A angedeutet, der komplette Source steht zur Verfügung.
|
Der Code für die Kochfunktion gestaltet sich wie folgt. 01 from turtle import * 02 03 class hilbert (turtle): 04 05 def __init__(self): 06 turtle.__init__(self, 640, 640, 600, 600, "Hilbertkurve") 07 self.u = 500 07 07 ..... 07 08 def A (self, zaehler): 10 if zaehler > 0: 11 self.D (zaehler -1) 12 self.init_winkel () 12 self.laufe (180, self.u) 11 self.A (zaehler -1) 12 self.init_winkel () 12 self.laufe (270, self.u) 11 self.A (zaehler -1) 12 self.init_winkel () 12 self.laufe (0, self.u) 11 self.B (zaehler -1) 24 24 .... |
|
|
Das zweite Beispiel für diese Art von Kurven stellt die Sierpinskikurve dar. Gegenüber
den Hilbertkurven weist diese Kurve trotz eines vergleichbaren Algorithmus einen
höheren Komplexitätsgrad auf. Die Sierpinskikurve ist gegenüber der Hilbertkurve geschlossen.
Die Verbindung der einzelnen Generatoren wird durch ein außerhalb der Rekursion liegendes
Muster gewährleistet.
|
Darstellung der Sierpinski Kurven für den Grad 4
[Source] |