Upload
wiebe-wiant
View
111
Download
3
Embed Size (px)
Citation preview
Wolken sind keine Kugeln, Berge keine Kegel, Küstenlinien keine Kreise. Die Baumrinde ist nicht glatt.
Definition: Eine Figur wird selbstähnlich genannt, wenn Teile der Figur kleine Kopien der ganzen Figur sind.
DefinitionFraktale
Wie lang ist die Küste Englands (Norwegens)?
Was sagt diese Zei-tungsmeldung aus?
Finde heraus, wie lang die beiden Küstenlinien sind.
Finde heraus, wie lang die gemeinsame Grenze zwischen Spanien und Portugal ist.
1.Englands KüsteFraktale
Maßstab Länge500 km 2600 km100 km 3800 km54 km 5770 km17 km 8640 km
Die Küste Englands
Fraktale 1.Englands Küste
Die Koch-Kurve erhält man, indem man, ausgehend von einer Strecke, das mittlere Drittel dieser Strecke entfernt und es durch zwei Schenkel eines gleichseitigen Dreiecks ersetzt. Mit den entstehenden Teilstrecken wird dieser Vor-gang unendlich oft wiederholt.
Fraktale 1. Die Kochsche Kurve
Die Iteration besteht nun darin,1. dass alle Linienstücke der Kurve in drei gleichlange Stücke unterteilt werden 2. auf dem jeweils mittleren Stück ein gleichseitiges Dreieck errichtet wird und 3. die Basis dieses Dreiecks (also das ursprüngliche Drittelstück) entfernt wird.
Fraktale 1. Die Kochsche Kurve
Mit Hilfe der Turtle-Grafik von LOGO lässt sich die Koch-Kurve einfach rekursiv programmieren.
Vorwärts – Links 60 – Vorwärts – Rechts 60 – Rechts 60 – Vorwärts – Links 60 – Vorwärts
Diese Befehle werden rekursiv aufgerufen.
to koch :stufe : laengeIfelse :stufe<0 [setpc 1+random 7 fd :laenge][~koch :stufe-1 :laenge/3 lt 60koch :stufe-1 :laenge/3 rt 60 rt 60koch :stufe-1 :laenge/3 lt 60koch :stufe-1 :laenge/3]end
1. Die Kochsche KurveFraktale
Mit Hilfe der Turtle-Grafik von LOGO läßt sich die Koch-Kurve einfach rekursiv programmieren.
Vorwärts – Links 60 – Vorwärts – Rechts 60 – Rechts 60 – Vorwärts – Links 60 – Vorwärts
Diese Befehle werden rekursiv aufgerufen.
Jetzt ohne IFELSE
to koch :stufe :laengeIf :stufe<0 [fd :laenge stop]
koch :stufe-1 :laenge/3 lt 60
koch :stufe-1 :laenge/3 rt 60 rt 60
koch :stufe-1 :laenge/3 lt 60
koch :stufe-1 :laenge/3end
1.2 Die Kochsche Kurve ohne IFELSEFraktale
Aufruf(Beispiel) : koch 3 500
Mit Hilfe der Turtle-Grafik von LOGO lässt sich die Koch-Kurve einfach rekursiv programmieren.
Vorwärts – Links 60 – Vorwärts – Rechts 60 – Rechts 60 – Vorwärts – Links 60 – Vorwärts
Diese Befehle werden rekursiv aufgerufen.
Jetzt ohne IFELSE
to koch :laengeif :laenge<0 [fd :laenge stop]
koch :laenge/3 lt 60
koch :laenge/3 rt 60 rt 60
koch :laenge/3 lt 60
koch :laenge/3end
1.3 Die Kochsche Kurve ohne IFELSE – Abbruch-
bedingung über die LängeFraktale
Die Entstehung der Kochschen Kurve kann mit Hilfe von gifsave als Animation dargestellt werden. (Abbruch über die Länge)
to koch :laengeif :laenge<10 [ fd :laenge (gifsave "koch.gif 0 :append 0) make
"append "true stop]koch :laenge/3 lt 60koch :laenge/3 rt 60 rt 60koch :laenge/3 lt 60koch :laenge/3end
1.4 Die Kochsche Kurve Animation mit GifsaveFraktale
to maincs setpensize[4 4]rt 90 pu bk 400 pd
setactivearea[-450 -10 450 300]make "append "false
koch 800end
Die Entstehung der Kochschen Kurve kann mit Hilfe von gifsave als Animation dargestellt werden.
1.5 Die Kochsche Kurve Animation mit GifsaveFraktale
Die Abbruchbedingung für die Fraktale kann einmal über die Länge der Strecken gesteuert werden, zum anderen ist es möglich, dafür die Iterationsstufe zu nehmen. Weiterhin sollen noch zwei anderen Versionen hinzugefügt werden. Die Strecken können mit Hilfe der random-Funktion und dem Befehl setpc unterschiedlich gefärbt werden und es ist möglich mit Hilfe von gifsave die Fraktale zu animieren. Diese Möglichkeiten sollen im Folgenden exemplarisch für alle möglichen fraktalen Kurven dargestellt werden.
Die verschiedenen Versionen der fraktalen Kurven
1. Steuerung über die Länge der Strecke
to Fraktal :laengeif :laenge<50 [fd :laenge stop]
Fraktal :laenge/3
… die rekursiven Aufrufe …..
end
Fraktale
Der Aufruf: Fraktal 600
ergibt die Darstellung der fraktalen Kurve bis die Länge weniger als 50 Pixel hat.
Die verschiedenen Versionen der fraktalen Kurven
2. Steuerung über die Iterationsstufe
to Fraktal :stufe :laengeif :stufe<1 [fd :laenge stop]
Fraktal :stufe-1 :laenge/3
… die rekursiven Aufrufe …..
end
Fraktale
Der Aufruf: Fraktal 2 600
ergibt die Darstellung von 2 Iterationsstufen
Die verschiedenen Versionen der fraktalen Kurven
3. Steuerung über die Iterationsstufe und unterschiedliche Farben der einzelnen Strecken
to Fraktal :stufe :laengeif :stufe<1 [setpc 1+random 7 fd :laenge stop]
Fraktal :stufe-1 :laenge/3
… die rekursiven Aufrufe …..
end
Fraktale
Der Aufruf: Fraktal 2 600
ergibt die Darstellung von 2 Iterationsstufen mit unterschiedlichen Farben (hier sind es 8 Farben)
Die verschiedenen Versionen der fraktalen Kurven
4. Steuerung über die Iterationsstufe und Animation der fraktalen Kurve (mit einer Farbe)
to Fraktal :stufe :laengeif :stufe<1 [fd :laenge (gifsave „Fraktal.gif 0 :append 0) make "append "true stop]
Fraktal :stufe-1 :laenge/3
… die rekursiven Aufrufe …..
end
Fraktale
Der Aufruf: Fraktal 5 600
ergibt eine Animation über 5 Iterationsstufen. Im main-Pro-gramm müssen 2 Zeilen einge-fügt werden (Zeile 4 und 5)
(1) to main(2) cs setpensize[4 4](3) rt 90 pu bk 400 pd
(4) setactivearea[-450 -300 450 300](5) make "append "false
(6) Fraktal 5 600(7) end
Die verschiedenen Versionen der fraktalen Kurven
5. Steuerung über die Länge und Animation der fraktalen Kurve (mit einer Farbe)
to Fraktal :laengeif :laenge<10 [fd :laenge (gifsave „Fraktal.gif 0 :append 0) make "append "true stop]
Fraktal :laenge/3
… die rekursiven Aufrufe …..
end
Fraktale
Der Aufruf: Fraktal 5 600
ergibt eine Animation über 5 Iterationsstufen. Im main-Pro-gramm müssen 2 Zeilen einge-fügt werden (Zeile 4 und 5)
(1) to main(2) cs setpensize[4 4](3) rt 90 pu bk 400 pd
(4) setactivearea[-450 -300 450 300](5) make "append "false
(6) Fraktal 600(7) end
Die Kreuzstichkurve stammt von T. Vicsek (Ungarn). Sie hat den nebenstehenden Generator und kann deshalb als koch-ähnlich angesehen werden. Bei der Drittelung ergeben sich hier 5 neue Teilstrecken
Fraktale 2. Die Kreuzstich Kurve
T. Vicsek
to kreuz :stufe :laenge if :stufe<1[setpc 1+random 7 fd :laenge]kreuz :stufe-1 :laenge/3 lt 90 kreuz :stufe-1 :laenge/3 rt 90 kreuz :stufe-1 :laenge/3 rt 90 kreuz :stufe-1 :laenge/3 lt 90 kreuz :stufe-1 :laenge/3end
Fraktale 2.1 Die Kreuzstich Kurve – Steuerung über die Iterationsstufe
to kreuz :laenge if :laenge<10[fd :laenge stop]kreuz :laenge/3 lt 90 kreuz :laenge/3 rt 90 kreuz :laenge/3 rt 90 kreuz :laenge/3 lt 90 kreuz :laenge/3end
Fraktale 2.2 Die Kreuzstich Kurve- Steuerung über die Länge
to kreuz :laenge if :laenge<10 [fd :laenge (gifsave „Fraktal.gif 0 :append 0) make "append "true stop]kreuz :laenge/3 lt 90 kreuz :laenge/3 rt 90 kreuz :laenge/3 rt 90 kreuz :laenge/3 lt 90 kreuz :laenge/3end
Fraktale 2.3 Die Kreuzstich Kurve- Animaton mit GifSave
to maincs setpensize[4 4]rt 90 pu bk 400 pdsetactivearea[-450 -10 450 300]make "append "falsekreuz 800end
to koch1 :laenge if :laenge<100[fd :laenge stop]koch1 :laenge/4 rt 60koch1 :laenge/4 lt 60 lt 60 koch1 :laenge/4 koch1 :laenge/4 rt 60 rt 60 koch1 :laenge/4 lt 60koch1 :laenge/4end
Fraktale 3.1 Kochähnliche Kurve – Steuerung über die Kurvenlänge
Ausgangselement ist wieder eine Strecke, die dieses Mal in 4 gleiche Teile geteilt wird. Die beiden Dreiecke sind gleichseitig. Dargestellt ist der 1. Iterationsschritt. Man erkennt 6 Teilstücke – also auch 6 rekursive Aufrufe.
to koch1Stufe :stufe :laenge if :stufe<1[FD :laenge stop]koch1Stufe :stufe-1 :laenge/4 rt 60koch1Stufe :stufe-1 :laenge/4 lt 60 lt 60 koch1Stufe :stufe-1 :laenge/4 koch1Stufe :stufe-1 :laenge/4 rt 60 rt 60 koch1Stufe :stufe-1 :laenge/4 lt 60koch1Stufe :stufe-1 :laenge/4end
Fraktale 3.2 Kochähnliche Kurve- Steuerung über Iterationsstufe
Iterationsstufe 3
to zwillingStufe :stufe :laenge if :stufe<1[ FD :laenge stop]lt 45zwillingStufe :stufe-1 :laenge*0.353553 rt 90zwillingStufe :stufe-1 :laenge*0.353553 zwillingStufe :stufe-1 :laenge*0.353553 lt 90 zwillingStufe :stufe-1 :laenge*0.353553 rt 45end
Fraktale4.1 Kochähnliche Kurve- die Zwillingskurve - Steuerung
über die Iterationsstufe
Ausgangselement - Iterationsstufe 1
to zwilling :laenge if :laenge<80[ FD :laenge stop]lt 45zwilling :laenge*0.353553 rt 90zwilling :laenge*0.353553 zwilling :laenge*0.353553 lt 90 zwilling :laenge*0.353553 rt 45end
Fraktale4.2 Kochähnliche Kurve- die Zwillingskurve - Steuerung
über die Länge
Iterationsstufe 4
to peano :stufe :laenge Ifelse :stufe<1[setpc 1+random 7 FD :laenge][peano :stufe-1 :laenge/3LT 90 peano :stufe-1 :laenge/3RT 90 peano :stufe-1 :laenge/3RT 90 peano :stufe-1 :laenge/3RT 90 peano :stufe-1 :laenge/3LT 90 peano :stufe-1 :laenge/3LT 90 peano :stufe-1 :laenge/3LT 90 peano :stufe-1 :laenge/3RT 90 peano :stufe-1 :laenge/3]end
Fraktale5.1 Die Peano - Kurve – Ifelse – Abbruch über die
Iterationsstufe
to peano :stufe :laenge If :stufe<1[FD :laenge stop]peano :stufe-1 :laenge/3 LT 90 peano :stufe-1 :laenge/3 RT 90 peano :stufe-1 :laenge/3 RT 90 peano :stufe-1 :laenge/3 RT 90 peano :stufe-1 :laenge/3 LT 90 peano :stufe-1 :laenge/3 LT 90 peano :stufe-1 :laenge/3 LT 90 peano :stufe-1 :laenge/3 RT 90 peano :stufe-1 :laenge/3end
Fraktale5.2 Die Peano-Kurve
- Abbruch über die Iterationsstufe – mit If
to peanoGif :stufe :laenge If :stufe<1[setpc 1+random 7 FD :laenge (gifsave "Peano.gif 0 :append 0) make "append "true stop]peanoGif :stufe-1 :laenge/3 LT 90 peanoGif :stufe-1 :laenge/3 RT 90 peanoGif :stufe-1 :laenge/3 RT 90 peanoGif :stufe-1 :laenge/3 RT 90 peanoGif :stufe-1 :laenge/3 LT 90 peanoGif :stufe-1 :laenge/3 LT 90 peanoGif :stufe-1 :laenge/3 LT 90 peanoGif :stufe-1 :laenge/3 RT 90 peanoGif :stufe-1 :laenge/3end
Fraktale5.2 Die Peano-Kurve
- Animation – Abbruch über die Iterationsstufe
to maincs setpensize[4 4]rt 90 pu bk 400 pd
setactivearea[-450 -300 450 300]make "append "false
peanoGif 2 400end
Fraktale5.3 Die Peano-Kurve
- Animation – Abbruch über die Iterationsstufe
Iterationsstufe 1
Fraktale5.4 Die Peano-Kurve
- Animation – Abbruch über die Iterationsstufe
Iterationsstufe 2
Fraktale 5.5 Die Peano Kurve
Fraktale 5.6 Die Peano Kurve
Peano
to dragon :level :turn :size if :level<1 [setpc 1+random 7 fd :size stop]dragon :level-1 90 :sizert : turndragon :level-1 -90 :sizeend
Fraktale 6.1 Die Drachenkurve
to Kochinsel :stufe :laenge If :stufe<0 [ FD :laenge stop]kochinsel :stufe-1 :laenge/4 LT 90 kochinsel :stufe-1 :laenge/4 RT 90 kochinsel :stufe-1 :laenge/4 RT 90 kochinsel :stufe-1 :laenge/4kochinsel :stufe-1 :laenge/4 LT 90 kochinsel :stufe-1 :laenge/4 LT 90kochinsel :stufe-1 :laenge/4 RT 90kochinsel :stufe-1 :laenge/4end
Fraktale 7.1 Die Kochinsel Kurve
Fraktale 7.2 Die Kochinsel
Fraktale 7.2 Die Kochinsel
Nimmt man jetzt als erstes Element ein Quadrat und wendet auf jede der 4 Seiten den rekursiven Algorithmus an, so erhält man ähnlich wie bei der Kochschen Schneeflocke eine geschlossene Kurve.
to KochInsel :laenge :stuferepeat 4[KochIsland :laenge :stufe rt 90]end
to KochIsland :laenge :stufeIf :stufe<0 [fd :laenge stop]KochIsland :laenge/4 :stufe-1 Lt 90KochIsland :laenge/4 :stufe-1 Rt 90KochIsland :laenge/4 :stufe-1 Rt 90KochIsland :laenge/4 :stufe-1 KochIsland :laenge/4 :stufe-1 Lt 90KochIsland :laenge/4 :stufe-1 Lt 90KochIsland :laenge/4 :stufe-1 Rt 90KochIsland :laenge/4 :stufe-1end
to maincs setpensize[2 2]home pu bk 100 rt 90 bk 200 lt 90 pdKochInsel 300 3end
Fraktale
Stufe 1 Stufe 2 Stufe 3
7.2 Die Kochinsel
Fraktale
Mathematische Betrachtungen
Stufe Anzahl der Segmente
Länge eines Segments
Umfang Fläche
1 4 1 s 4 s A
2 32 ¼ s 8 s A
3 256 1/16 s 16 s A
n (8)n/2 (1/4)n-1*s (1/4)n-1*s A
7.2 Die Kochinsel
Ergebnis: Die Länge der Kurve ist unendlich, die eingeschlossene Fläche ist endlich und ändert sich nicht.
Fraktale 8.1 Der Sierpinski-Teppich
Das Ausgangselement ist wieder eine Strecke beliebiger Länge. Diese wird jetzt in drei gleiche Teile geteilt und, wie in der 1. Iterationsstufe gezeigt, im Sinne der Zahlenwerte durchlaufen. Dabei werden die Strecken 2, 3 und 4 zweimal gezeichnet.
Fraktale 8.2 Der Sierpinski-Teppich
to SierpinskiTeppich :stufe :laengeif :stufe<1[wait 0 fd :laenge stop]
SierpinskiTeppich :stufe-1 :laenge/3 lt 90SierpinskiTeppich :stufe-1 :laenge/3 rt 90SierpinskiTeppich :stufe-1 :laenge/3 rt 90SierpinskiTeppich :stufe-1 :laenge/3 SierpinskiTeppich :stufe-1 :laenge/3 rt 90SierpinskiTeppich :stufe-1 :laenge/3 rt 90SierpinskiTeppich :stufe-1 :laenge/3 SierpinskiTeppich :stufe-1 :laenge/3 rt 90SierpinskiTeppich :stufe-1 :laenge/3 rt 90SierpinskiTeppich :stufe-1 :laenge/3 lt 90SierpinskiTeppich :stufe-1 :laenge/3
end
to maincs setpensize[5 5]setpc[0 0 255]rt 45SierpinskiTeppich 1 500end
Fraktale 8.3 Der Sierpinski-Teppich
Fraktale 8.4 Der Sierpinski-Teppich
Mathematische Betrachtungen
Stufe Seitenlänge Umfang Totale Fläche
Gelöschte Fläche
1 S 4s A 0
2 (1/3)*s 4s+(4/3)s=5.33s (8/9)*A (1/9)*A
3 (1/9)*s 4s+(4/3)s+8*(4/9)s =8.89s
(8/9)2*A A*[(1/9)+(8/81)]
4 (1/3)n-1*s 4s[1+(1/3)+8*(1/9)+82*(1/27)+..+8n-2 * (1/3)n-1]
(8/9)n-1*A A[(1/9)+8(1/9)2+ 82(1/9)3+..+8n-2 (1/9)n-
1]
Fraktale 9.1 Das sog. Kreuz-Fraktal
Ausgehend von einem Quadrat werden auf jeder der Quadratseiten Kreuze entsprechend der Abbildung errichtet.
Fraktale 9.2 Das sog. Kreuz-Fraktal
to KreuzFraktal :stufe :laengeif :stufe<1[setpc 1+random 7 fd :laenge stop]KreuzFraktal :stufe-1 :laenge/3 lt 90KreuzFraktal :stufe-1 :laenge/3 lt 90KreuzFraktal :stufe-1 :laenge/3 rt 90KreuzFraktal :stufe-1 :laenge/3 rt 90 KreuzFraktal :stufe-1 :laenge/3 lt 90KreuzFraktal :stufe-1 :laenge/3 rt 90KreuzFraktal :stufe-1 :laenge/3 rt 90KreuzFraktal :stufe-1 :laenge/3 lt 90KreuzFraktal :stufe-1 :laenge/3 rt 90KreuzFraktal :stufe-1 :laenge/3 rt 90KreuzFraktal :stufe-1 :laenge/3 lt 90KreuzFraktal :stufe-1 :laenge/3 lt 90KreuzFraktal :stufe-1 :laenge/3 end
to maincs setpensize[5 5]setfc[10 10 10]fill
repeat 4[ KreuzFraktal 1 170 right 90]
end
Fraktale 9.3 Das sog. Kreuz-Fraktal
Stufe 1Stufe 2
Stufe 3
Fraktale 10.1 Das H-Fraktal
to HFraktal :stufe :laengeif :stufe<1[ stop]
fd :laenge lt 90HFraktal :stufe-1 :laenge*(1/Sqrt 2)lt 90 fd 2*:laenge lt 90HFraktal :stufe-1 :laenge*(1/Sqrt 2)lt 90 fd :laenge
end
to maincs setpensize[4 4]rt 90HFraktal 8 200end
Fraktale 10.2 Das H-Fraktal
Stufe 2
Stufe 4
Stufe 6
Fraktale 10.3 Das H-Fraktal
Stufe 8
Stufe 10
Fraktale 10.4 Das H-Fraktal
to HFraktalGifSave :stufe :laengeif :stufe<1[ stop]
fd :laenge lt 90HFraktalGifSave :stufe-1 :laenge*(1/Sqrt 2)lt 90 setpc 1+random 7 fd 2*:laenge (gifsave "HFraktal.gif 0 :append 0) make "append "true lt 90HFraktalGifSave :stufe-1 :laenge*(1/Sqrt 2)lt 90 setpc 1+random 7 fd :laenge
end
to main
cs setpensize[4 4]rt 90setfc[10 10 10]fillsetactivearea[-500 -400 500 400]make "append "false
HFraktalGifSave 8 200end
Fraktale 10.5 Das H-Fraktal
Gif-Animation
Fraktale
Mathematische Betrachtungen
Stufe Seitenlänge Anzahl der neuen Segmente
Totale Länge der H-Kurve
1 s 1 1 s
2 0.71 s 2 1.42 s
3 0.5 s 4 3.42 s
4 0.36 s 8 6.3 s
n (0.71)n-1*s 2n-1 0.710 s + 2(0.71)1 s + 4 (0.71)2 s+ 8(0.71)3 s + .. +
(2n-1)(0.71)n-1 s
10.6 Das H-Fraktal
Fraktale
Ausgehend vom Mittelpunkt wer-den in 3 Richtungen, die jeweils einen Winkel von 120o bilden, Strecken einer vorgegebenen Län-ge gezeichnet. Das Ende dieser Strecken ist wieder Ausgangs-punkt für die nächsten 3 Strecken, die jetzt aber die halbe Länge besitzen.
Das 3-Sterne-Fraktal
Fraktale
to dreistern :laenge :stufeif :stufe<0 [stop]
fd :laengedreistern :laenge/2 :stufe-1bk :laenge lt 120
fd :laengedreistern :laenge/2 :stufe-1bk :laenge lt 120
fd :laengedreistern :laenge/2 :stufe-1bk :laenge lt 120
end
to maincs setpensize[5 5] pddreistern 200 1end
Stufe 3
Das 3-Sterne-Fraktal
Fraktale
Stufe 5
Das 3-Sterne-Fraktal
Fraktale
Ausgehend vom Mittelpunkt werden in 5 Richtungen, die jeweils einen Winkel von 72o bilden, Strecken einer vorgegebenen Länge gezeich-net. Das Ende dieser Strecken ist wieder Ausgangspunkt für die nächsten 5 Strecken, die jetzt aber ein Drittel der Länge besitzen.
Das 5-Sterne-Fraktal
Fraktale
to fuenfstern :laenge :stufeif :stufe<0 [stop]
fd :laengefuenfstern :laenge/3 :stufe-1bk :laenge lt 72
fd :laengefuenfstern :laenge/3 :stufe-1bk :laenge lt 72
fd :laengefuenfstern :laenge/3 :stufe-1bk :laenge lt 72
fd :laengefuenfstern :laenge/3 :stufe-1bk :laenge lt 72
fd :laengefuenfstern :laenge/3 :stufe-1bk :laenge lt 72
end
to maincs setpensize[5 5] pdfuenfstern 200 1end
Stufe 3
Das 5-Sterne-Fraktal
Fraktale
Stufe 5
Das 5-Sterne-Fraktal
Fraktale
Stufe 1 und 2
Die Sierpinski-Kurve
to maincs pu lt 90 bk 300 pd setpensize[3 3]SierpinskiKurve 20 4end
to SierpinskiKurve :laenge :stufeIf :stufe<0 [stop]
SierpinskiKurve :laenge :stufe-1 rt 90SierpinskiKurve :laenge :stufe-1 lt 90
fd :laenge lt 90SierpinskiKurve :laenge :stufe-1 rt 90SierpinskiKurve :laenge :stufe-1
end
Fraktale
Stufe 3 und 4
Die Sierpinski-Kurve
Fraktale Die Hilbert-Kurve
to Hilbert1 :laenge :stufe :parIf :stufe<0 [stop]
lt :par*90hilbert1 :laenge :stufe-1 (0-:par)fd :laenge rt :par*90hilbert1 :laenge :stufe-1 :parfd :laengehilbert1 :laenge :stufe-1 :parrt :par*90 fd :laengehilbert1 :laenge :stufe-1 (0-:par)lt :par*90
end
to maincs setpensize[3 3]hilbert1 10 4 1end
Fraktale
Stufe 1
Die Hilbert-Kurve
Stufe 2
Stufe 3
Fraktale Die Hilbert-Kurve
Stufe 4
Fraktale Die Fraktal-Kurve (??)
Stufe 4
to maincs setpensize[3 3]pfla 80 3end
to pfla :laenge :stufeIf :stufe<0 [stop]
repeat 4[fd :laenge rt 180 pfla :laenge/2 :stufe-1 rt 180 fd :laenge wait 3 rt 90]end
Fraktale Die Fraktal-Kurve (??)
Stufe 1
Stufe 3
Stufe 2
Stufe 4
Fraktale Rekursive Dreiecke
to dreiecke1 :laenge :stufeIf :stufe<0 [stop]
rt 30 fd :laenge lt 60fd :laenge rt 30
dreiecke1 :laenge/2 :stufe-1lt 150 fd :laenge lt 60fd :laenge lt 150 lt 120rt 30 fd :laenge lt 60fd :laenge rt 30
dreiecke1 :laenge/2 :stufe-1lt 150 fd :laenge lt 60fd :laenge lt 150 lt 120rt 30 fd :laenge lt 60fd :laenge rt 30
dreiecke1 :laenge/2 :stufe-1lt 150 fd :laenge lt 60fd :laenge lt 150 lt 120end
to maincs setpensize[3 3]dreiecke1 150 4end
Fraktale Rekursive Dreiecke
Stufe 1
Stufe 3
Stufe 2
Stufe 4
Ausgangselement
Fraktale SternFraktal
to SternFraktal :laenge :stufeIf :stufe<0 [stop]
repeat 5[rt 54 fd :laenge rt 162 SternFraktal :laenge/3 :stufe-1 ~ lt 18 fd :laenge lt 126]end
to maincs setpensize[3 3]SternFraktal 150 3end
An die Ecken eines fünfstrahligen Sternes werden rekursiv wieder fünfstrahlige Sterne angefügt
Fraktale
Stufe 1
Stufe 3
Stufe 2
Ausgangselement
SternFraktal
Die Länge des Ausgangs-striches sei 1.Dann ist bei der 1. Stufe jede einzelne Länge 1/3.Bei der 2. Stufe ist jede einzelne Länge (1/3) *(1/3) = (1/3)2
Bei der 3. Stufe also:(1/3)3 Bei der n.- Stufe also:(1/3)n
Die Länge der Kochschen KurveFraktale
Die Anzahl der Seiten vervierfacht sich bei jedem Schritt, also:41, 42, 43, 4n
Damit ergibt sich für die gesamte Länge:
Dieser Ausdruck wächst mit zunehmendem n über alle Grenzen. Das bedeutet letztendlich, dass die Länge der Kochkurve unendlich ist.
Fraktale Die Länge der Kochschen Kurve
nnn
n 34
31
4U
Die Kochsche Schneeflocke entsteht, wenn nach dem Zeichnen der ersten Koch-Kurve eine Rechtsdrehung um 120 Grad erfolgt.
to flocke :size :stuferepeat 3[koch :size :stufe rt 120]end
Fraktale Die Kochsche Schneeflocke
Animation
Fraktale Die Kochsche Schneeflocke
Dreht man jetzt nicht nach rechts sondern nach links, so erhält man interessanterweise ein völlig anderes Fraktal.
to AntiSchneeflocke :laenge :stufelt 30repeat 3[koch :laenge :stufe lt 120]end
to maincs setpensize[3 3]home pu bk 100 rt 90 fd 200 lt 90 pd;;damit die ganze Graphik angezeigt wirdAntiSchneeflocke 600 3end
Fraktale Die Kochsche AntiSchneeflocke
to koch :laenge :stufeIf :stufe<0 [fd :laenge stop]
koch :laenge/3 :stufe-1 LT 60
koch :laenge/3 :stufe-1 RT 60 RT 60
koch :laenge/3 :stufe-1 LT 60
koch :laenge/3 :stufe-1end
Fraktale
Ausgangselement
Die Kochsche AntiSchneeflocke
Stufe 3Stufe 1
Fraktale
Mathematische Betrachtungen
Stufe Seitenlänge Anzahl der neuen Segmente
Totale Länge der Kurve
Fläche
1 1s 3 3 s A
2 1/3 s 12 4 s A- 1/3 A
3 1/9 s 48 48/9 s = 5,33 s A-1/3 A – 4/27 A
4 1/27 s 192 64/9 s = 7,11 s A-1/3 A – 4/27 A – 48 (1/729) A
n (1/3)n-1*s (3)4)n-1 (3)(1/3)n-1 (4)n-1 s A- 1/3 A* (1+4/9+(4/9)2+
…+(4/9)n)
Die Kochsche AntiSchneeflocke
Der Umfang der Kochschen Schneeflocke
Wie in Folie 56 schon gezeigt wurde, ist die Länge der Kochschen Kurve:
Da die Kochsche Schneeflocke aus drei Stücken der Kochschen Kurve besteht, erhält man jetzt für die Länge des Umfangs:
Der Umfang hat natürlich auch hier einen unendlichen Wert, da gilt:
Fraktale Die Kochsche Schneeflocke
nnn
n 34
31
4U
nnn*
n 34
31
4U
333 nU
Der Umfang
n
n 3
43lim
Stufe 0: Das gleichseitige Dreieck habe die Seitenlänge 1. Damit erhält man für den Flächeninhalt:
Stufe 1: Hier werden die Flächeninhalte von drei Dreiecken addiert. Jeder Flächeninhalt eines solchen Dreiecks ist 1/9 des Flächeninhalts des Ausgangsdreiecks. Es ergibt sich also:
Fraktale Die Kochsche SchneeflockeDer Flächeninhalt
34
10 )(A
)()()( 09
1303
4
1
9
133
4
11 AAA
Die Flächeninhalte der Dreiecke, die hinzugefügt werden, ist jeweils 1/9 des Flächeninhalts der Dreiecke, die auf der Stufe zuvor hinzugefügt wurden. In der 2. Stufe werden 34 Dreiecke hinzugefügt. Für den Flächeninhalt ergibt sich also:
In der 3. Stufe werden 316 Dreiecke hinzugefügt, also:
Fraktale Die Kochsche SchneeflockeDer Flächeninhalt
)()()()( 09
1
9
1430
9
1302 AAAA
)()()()()( 09
1
9
1
9
14430
9
1
9
1430
9
1303 AAAAA
Für die n-te Stufe ergibt sich dann:
Mit Hilfe der vollständigen Induktion kann man zeigen:
Setzt man das Ergebnis in A(n) ein, so erhält man:
Fraktale Die Kochsche SchneeflockeDer Flächeninhalt
).....()()()(12
9
4
9
4
9
410
9
130
n
AAnA
9
41
9
41
9
4
9
4
9
41
12
n
n
.....
Setzt man das Ergebnis in A(n) ein, so erhält man:
Fraktale Die Kochsche SchneeflockeDer Flächeninhalt
)()()()()(
)()()()()(
05
80
5
30
5
9
41
099
130
9
499
41
09
130
9
41
9
41
09
130
AAAAA
AAAAnA
n
nn
Der Bruchterm hat einen Grenzwert, dieser lautet:
Damit ergibt sich insgesamt für A(n ):
Man hat es also bei der Kochschen-Schneeflocke mit einer endlichen Fläche zu tun, obwohl der Umfang einen unendlichen Wert annimmt.
Fraktale Die Kochsche SchneeflockeDer Flächeninhalt
51
4994
1n
n
lim
)0(5
8)( AnA
Nimmt man a als Länge des Ausgangsdreiecks, so erhält man für die gesamte Fläche in Abhängigkeit von der Seitenlänge des ersten Dreiecks
Dieses ist natürlich für einen bestimmten Zahlenwert a ein endlicher Wert.
Fraktale Die Kochsche SchneeflockeDer Flächeninhalt
22
5
32
5
83
4)( a
anA
BäumeDer Binärbaum – mit IFELSE
to Baum1 :laengeifelse :laenge<10 [stop][FD :laenge RT 45baum1 :laenge/2LT 90baum1 :laenge/2RT 45BK :laenge]end
to mainclearscreensetfc [0 0 0] fillsetpensize[4 4]penupBack 150pendownbaum1 200 end
BäumeDer Binärbaum – mit IF
to Baum1 :laengeif :laenge<10 [setpc 1+random 7 stop]FD :laenge RT 45baum1 :laenge/2LT 90baum1 :laenge/2RT 45BK :laengeend
to mainclearscreensetfc [0 0 0] fillsetpensize[4 4]baum1 200 end
Der Baum besteht aus einem Stamm mit der Länge :laenge, der an-schließend unter 45o nach rechts bzw. links durch zwei Zweige mit der Länge :laenge/2 fortgesetzt wird, an jeden Zweig schließen unter 45o wieder zwei Zweige an usw.
BäumeDer Binärbaum – mit IF
to Baum2 :laengeif :laenge>10 [setpc 1+random 7FD :laenge RT 30baum2 :laenge*0.8LT 90baum2 :laenge*0.6RT 60BK :laenge]end
Wenn man die Winkel bei der Rechtsdrehung verändert (die Summe muss 90o ergeben), erhält man einen leicht unsymmetrischen Baum. Zusätzlich kann man noch die Länge der linken bzw. rechten Äste mit einem unterschiedlichen Faktor verkleinern.
to mainclearscreensetfc [0 0 0] fillsetpensize[4 4]baum2 200 end
BäumeBaum mit vier Ästen
to Baum :laenge :stufeif :stufe<1[setpc 1+random 7 stop] lt 25 fd :laenge Baum .5*:laenge :stufe-1 bk :laenge rt 20 fd 0.6*:laenge Baum 0.6*:laenge :stufe-1 bk 0.6*:laengert 25 fd 0.5*:laenge Baum 0.6*:laenge :stufe-1 bk 0.5*:laengert 25 fd 0.5*:laengeBaum 0.6*:laenge :stufe-1 bk 0.5*:laenge lt 45end
BäumeDer verzweigte Baum
to baum :laengeifelse :laenge<15 [forward :laenge
back :laenge stop][setpc 1+random 7forward :laenge/3left 30 baum :laenge*2/3 right 30setpc 1+random 7forward :laenge/6right 25 baum :laenge/2 left 25setpc 1+random 7forward :laenge/3right 25 baum :laenge/2 left 25setpc 1+random 7forward :laenge/6back :laenge]end
BäumeDer verzweigte Baum – mit IF
to baum :laengeif :laenge<15 [stop]forward :laenge back :laengesetpc 1+random 7forward :laenge/3left 30 baum :laenge*2/3 right 30setpc 1+random 7forward :laenge/6right 25 baum :laenge/2 left 25setpc 1+random 7forward :laenge/3right 25 baum :laenge/2 left 25setpc 1+random 7forward :laenge/6back :laengeend
Die bekannten Pythagoras-Bäume gehen zurück auf den holländischen Ingenieur Bosmann. Er entwarf diese während des 2. Weltkrieges an dem Zeichenbrett, an dem er sonst seine U-Boot-Pläne zeichnete. Die Abbildung beruht auf der Figur des Pythagoras-Lehrsatzes. Die beiden Katheten des rechtwinkligen Dreiecks dienen als Verzweigung.
Der symmetrische Pythagoras Baum
Bäume
Man geht dazu aus von der Figur zum Satz von Pythagoras, also von einem rechtwinkeligen Dreieck, dessen Seiten jeweils die Basis eines nach außen zu gezeichneten Quadrates sind. Dann stellt man sich vor, dass die Kathetenquadrate wieder Hypotenusenquadrat einer weitern derartigen Figur sind usw.
BäumeDer symmetrische Pythagoras Baum
to pyth1 :laenge quadrat :laenge if :laenge<30 [RT 90 FD :laenge stop] setpc 1+random 7 wait 30 FD :laenge LT 45 pyth1 :laenge*Cos 45 pyth1 :laenge*Sin 45 RT 45 setpc 1+random 7 wait 30 FD :laenge LT 90end
BäumeDer symmetrische Pythagoras Baum
to pyth2 :laenge quadrat :laenge if :laenge<40 [RT 90 FD :laenge stop] setpc 1+random 7 wait 60 FD :laenge LT 30 pyth2 :laenge*Cos 30 pyth2 :laenge*Sin 30 RT 30 setpc 1+random 7 wait 60 FD :laenge LT 90end
BäumeDer unsymmetrische Pythagoras Baum
Bäume
Auch hier lassen sich viele nette Rech-nungen anstellen, wobei man sich aller-dings, um allzu komplizierte Ausdrücke zu vermeiden, auf den 45°-Fall be-schränken sollte. Hier erhält man bei-spielsweise als Gesamthöhe der Figur, die Gesamtflächen aller pro Stufe hinzu-kommenden Quadrate ist c2, die Umfän-ge der jeweils hinzukommenden neuen Figuren bilden eine geometrische Reihe mit dem Quotienten 2, daher hat die Figur insgesamt einen unendlichen Um-fang, zeichnet man die aufgesetzten Quadrate nur nach einer Seite, ist der Quotient 1/ 2 und die Reihe hat daher eine endliche Summe.
Der unsymmetrische Pythagoras Baum
to busch :laenge :stufeif :stufe=0 [stop]fd :laenge lt 40busch :laenge/3.5 :stufe-1 rt 55busch :laenge/2 :stufe-1 rt 50busch :laenge/2.5 :stufe-1 lt 65 bk :laengeend
Unsymmetrischer StrauchSträucher
Ein Strauch mit drei Verzweigungen erfordert natürlich auch drei Selbst-aufrufe des Programms. Verändert man dann noch die Winkel und die Längenverkürzung, so sieht der Baum schon aus wie ein Strauch.
to tree1 :size
if :size<5[fd :size back :size stop]fd :size/3left 30 tree1 :size*2/3 right 30
fd :size/6right 25 tree1 :size/2 left 25
fd :size/3right 25 tree1 :size/2 left 25
fd :size/6back :sizeend
Sträucher
to Farn :SizeIf :Size < 5 [Stop]Forward :Size / 20Left 80 Farn :Size * 0.3Right 82 Forward :Size / 20Right 80 Farn :Size * 0.3Left 78 Farn :Size * 0.9Left 2 Back :Size / 20Left 2 Back :Size / 20Endto GoNew SetPos [-50 -170] PenDown Farn 640End to NewCsSetSC[0 0 0] SetPC[0 255 0]PenUp HideTurtle End
Der Farn
Aufruf mit: go
Im Königsdreieck (alle Seiten sind gleich lang), das sich zwischen drei Pyramiden erstreckt, befinden sich irgendwo unter dem Staub der Jahrtausende der Eingang zur Grabkammer des Pharaos Tutramses. Schon viele Schatzsucher haben sich aufgemacht, das Grab zu finden und nach den kostbaren Grabbeigaben zu schürfen. Vergeblich!Der Fluch des Pharaos bewirkt, dass sich der Schatzsucher, sobald er sich im Königsdreieck befindet, nur geradlinig auf eine der Pyramidenspitze zu bewegen kann. Dabei schafft er jeweils genau die Hälft der Strecke bis zur nächsten Pyramide und muss eine Weile rasten, um dann von neuem irgendeine Pyramide anzusteuern. Gibt es Stellen im Königsdreieck, die ein Schatzsucher niemals erreichen kann, so dass der Eingang zur Grabkammer verborgen bleibt und der Pharao seine ewige Ruhe behalten wird?
Der Fluch des Pharaos (oder das Chaos-Spiel)
Fraktale
Die Regeln1. Wähle einen beliebigen Startpunkt P im Dreieck ABC2. Würfle oder ziehe aus einer Urne ein Los mit einer Zahl
zwischen 1 und 63. Verbinde den Punkt P mit der Ecke A, wenn eine 1 oder 2 gewürfelt wurde mit der Ecke B, wenn eine 3 oder 4 gewürfelt wurde mit der Ecke C, wenn eine 5 oder 6 gewürfelt wurde. Bestimme den Mittelpunkt M der Verbindungsstrecke.
Dies ist der neue Punkt P*.4. Gehe zu 2.
Das Chaos-SpielFraktale
Das MSWLogo-Programm
to maincssetpensize[2 2]hatChaosSpiel 0 0end
to ChaosSpiel :x :y make „z random 3 make „z :z+1 if :z=1 [PunktA] if :z=2 [PunktB] if :z=3 [PunktC] ChaosSpiel :x :yend
to PunktA make „x (:x-200)/2 make „y (:y+200)/2 pu setx :x sety :y pd fd 1 bk 1end
to PunktB make „x (:x+200)/2 make „y (:y+200)/2 pu setx :x sety :y pd fd 1 bk 1end
to PunktC make „x :x/2 make „y (:y-200)/2 pu setx :x sety :y pd fd 1 bk 1end
Fraktale Das Chaos-Spiel
Aufgaben
1. Führe das Programm aus. Um es zu stoppen, musst du den HALT-Button anklicken.
2. Die Koordinaten der Eckpunkte A(-200,200), B(200,200) und C(0,-200) sind vorgegeben. Verändere das Programm so, dass die Koordinaten der Punkte eingegeben werden können.
3. Was passiert, wenn man 4 Punkte benutzt? Schreibe das Programm um und teste es. Ergebnis?
Fraktale Das Chaos-Spiel
Das Sierpinski-DreieckFraktale
to sierpinski :stufe :laengeif :stufe=0 [repeat 3[fd :laenge rt 120]stop]sierpinski :stufe-1 :laenge/2 fd :laenge rt 120sierpinski :stufe-1 :laenge/2 fd :laenge rt 120sierpinski :stufe-1 :laenge/2 fd :laenge rt 120end
Das Sierpinski-Dreieck – mit IF
Fraktale
to sierpinski :laengeif :laenge<20 [repeat 3[fd :laenge rt 120]stop]sierpinski :laenge/2 fd :laenge rt 120sierpinski :laenge/2 fd :laenge rt 120sierpinski :laenge/2 fd :laenge rt 120end
Das Sierpinski-DreieckFraktale
Das Sierpinski-DreieckFraktaleto fill_itsetfc 9-:levelrt 30 pufd 0.6*:sizefill bk 0.6*:sizepd lt 30end
to maincssetpensize[3 3]pu bk 100rt 30 pdfor[level 1 4][start 500 :level wait 30]end
to start :size :levelif :level=0[stop]repeat 3[zeichne rt 120] fill_itend
to zeichnestart :size/2 :level-1fd :sizeend
to sierpinski :level :laengeif :level=0[repeat 3[fd :laenge rt 120]stop]sierpinski :level-1 :laenge/2 fd :laenge rt 120sierpinski :level-1 :laenge/2 fd :laenge rt 120sierpinski :level-1 :laenge/2 fd :laenge rt 120end
Aufruf: sierpinski 5 400
Das Sierpinski-DreieckFraktale
Das Sierpinski-DreieckFraktale
to sierpinski2 :laenge if :laenge<5 [stop] pu fd :laenge pd fd :laenge bk :laenge rt 90 fd :laenge bk :laenge lt 90 sierpinski2 :laenge/2 pu bk :laenge pd fd :laenge bk :laenge rt 90 fd :laenge bk :laenge lt 90 sierpinski2 :laenge/2 pu rt 90 fd :laenge lt 90 pd fd :laenge bk :laenge rt 90 fd :laenge bk :laenge lt 90 sierpinski2 :laenge/2 pu rt 90 bk :laenge lt 90 pd end
Aufruf: sierpinski2 200
Das Sierpinski-DreieckFraktale
Das folgende Beispiel zeigt, dass sich das Sierpinski-Dreieck auf unzählige Arten variieren lässt.
Das Sierpinski-DreieckFraktale
to sierpinski3 :laenge if :laenge<5 [stop] pu fd :laenge fd :laenge rt 90 pd fd :laenge bk :laenge rt 90 fd :laenge bk :laenge lt 90 sierpinski3 :laenge/2 pu lt 90 bk :laenge bk :laenge pd fd :laenge bk :laenge rt 90 fd :laenge bk :laenge lt 90 sierpinski3 :laenge/2 pu
rt 90 fd :laenge lt 90 pd fd :laenge bk :laenge rt 90 fd :laenge bk :laenge lt 90 sierpinski3 :laenge/2
pu rt 90 bk :laenge lt 90 pd end
Aufruf: sierpinski3 200
Das Sierpinski-DreieckFraktale
To Display :OrderSetPC[255 255 255]SetPos [-190 184] Label Sentence [Antenne Tree Level] :OrderEnd
To Go :OrderNew Init :Order Display :OrderHome Right 90 SetPC[255 255 0] PenDownTree :Order :SizeEnd
To Init :OrderMake "Size 150 Make "RootHalf 1/Sqrt 2End
To NewCsSetSC[0 0 0] SetPC[255 255 0] Setpensize[4 4] PenUp HideTurtle End
To Tree :Order :SizeIf :Order < 1 [Stop] Forward :Size Left 90 Tree :Order-1 :RootHalf*:SizeLeft 90 Forward 2*:Size Left 90Tree :Order-1 :RootHalf*:SizeLeft 90 Forward :SizeEnd
Aufruf: go 8
Der AntennenbaumFraktale
Der Cantor-StaubVersion 1
Fraktale
to Cantor :stufe :laenge Ifelse :stufe<0[setpc 1+random 7 FD :laenge][pd Cantor :stufe-1 :laenge/3Pufd :laenge/3PdCantor :stufe-1 :laenge/3]end
Der Cantor-StaubVersion 2
Fraktale
to CantorQuadrate :laenge :stufe if :stufe=0 [pd quadrat :laenge stop]repeat 4[pu fd :laenge rt 90 CantorQuadrate :laenge/3 :stufe-1]end
to quadrat :laengerepeat 4[fd :laenge rt 90]end
Der Cantor-StaubVersion 3
Fraktale
to cantor :level :laengeif :level=0[repeat 4[fd :laenge rt 90]stop]cantor :level-1 :laenge/3 fd :laenge rt 90cantor :level-1 :laenge/3 fd :laenge rt 90cantor :level-1 :laenge/3 fd :laenge rt 90cantor :level-1 :laenge/3 fd :laenge rt 90end
Der Cantor-StaubVersion 4
Fraktale
to CantorVersion4 :laenge :stufeIf :stufe<0 [stop]
repeat 4[CantorVersion4 :laenge/3 :stufe-1 fd :laenge wait 3 rt 90]end
to maincs setpensize[2 2]CantorVersion4 400 4end
Der Cantor-StaubVersion 4
Fraktale
Stufe 1
Stufe 3
Stufe 2
Stufe 4
Sierpinski-CarpetFraktale
to carpet :laenge :stufeif :stufe<1 [stop]repeat 4[shape rt 90]carpetfillend
to carpetfill pu rt 45 fd :laenge/2 setfc 7-:stufe fill bk :laenge/2 lt 45 pdend
to mainclearscreensetfc [10 10 10] fillsetpensize[5 5]pu bk 100 rt 90 bk 200 lt 90 pd setpc 0 pendownCarpet 500 3end
to shape carpet :laenge/3 :stufe-1 fd :laenge/3 carpet :laenge/3 :stufe-1 fd 2*:laenge/3end
Aufruf: carpet 400 3
Sierpinski-CarpetFraktale
Im Jahre 1891 veröffentlichte D. Hilbert in den M. Annalen eine Arbeit mit dem Titel Über die stetige Abbildung einer Linie auf ein Flächenstück, in der er eine Kurve beschrieb, die durch jeden Punkt eines Quadrats geht.
Als Grundfigur verwendet man ein unten offenes Quadrat, das einmal als Rechtskurve und zum anderen als Linkskurve durchlaufen wird.
Die Hilbert-Kurve
Beim Zeichnen der Grund-figur wird jeweils in den Ecken, d.h. unmittelbar vor der Vorwärts-Anweisung, die Prozedur selbst aufge-rufen. Man kann sich vorstellen, dass die vier Ecken „aufgeblasen“ und durch die Grundfigur ersetzt werden.
Fraktale
Fraktale Die Hilbert-Kurve
Fraktale Die Hilbert-Kurve
Fraktale Die Hilbert-Kurve
Rekursive Konstruktion
1. Teile ein quadratisches Gebiet auf in 4 kongruente Teilquadrate
2. Finde eine raumfüllende Kurve für jedes Teilquadrat
3. Füge die Teilfiguren geeignet zusammen
Fraktale Die Hilbert-Kurve
Fraktale Die Hilbert-Kurve
to hilbert :size :level :vorzeichenIf :level=0[stop]lt 90*:vorzeichenhilbert :size :level-1 -:vorzeichenwait 5setpc 1+random 8fd :sizert 90*:vorzeichenhilbert :size :level-1 :vorzeichenwait 5
setpc 1+random 8fd :sizehilbert :size :level-1 :vorzeichenrt 90*:vorzeichenwait 5setpc 1+random 8fd :sizehilbert :size :level-1 -:vorzeichenlt 90*:vorzeichenend
Aufruf: hilbert 20 2 -1
Fraktale Die Hilbert-Kurve
Lindenmayer-Systeme
Das L-System (Lindenmayer-System) geht auf den Biologen Aristid Lindenmayer (1925-1989) zurück, der versuchte, mit Hilfe von formalen Syste-men und Grammatiken Wachs-tumsprozesse lebender Orga-nismen nachzubilden. Vor allem interessierten ihn Verzwei-gungsmechanismen bei Bäumen und Büschen.
Einführung
Lindenmayer-Systeme
Geboren am 17. November 1925 inBudapest
Gestorben am 30. Oktober 1989 in den Niederlanden
Universitätsabschluss in Chemie,danach emigriert in die USA
1968 ein grammatikalisches Modell zur Darstellung von Pflanzen entwickelt
Aristid Lindenmayer - Biographie
Lindenmayer-SystemeEinführung
Das L-System ist ein Er-setzungssystem. Ausgehend vom Startsymbol, dem Axiom, wird jedes Zeichen schrittweise nach festgelegten Regeln durch eine bestimmte Zeichenfolge ersetzt, die auch aus demsel-ben Zeichen bestehen kann. In jedem Iterationsschritt werden alle vorhandenen Regeln gleich-zeitig auf die schon vorhandene Zeichenkette angewendet.
Lindenmayer-Systeme
L-Systeme. Deterministische L-Systeme, bzw. nicht determi-
nistische oder stochastische L-Systeme. Stochastische L-System enthalten, wie der Name schon sagt, Zufallselemente, Deterministische nicht. Deter-ministische L-System be-zeichnet man mit einem “D”.
.Kontext freie bzw. Kontext sensitive L-Systeme. Bei Kontext sensitiven L-Systemen hängt die En-wicklung der einzelnen Elemente von ihren Nachbarn ab nicht so bei den Kontext freien. Je nach Größe des berücksichtigten Kon-textes werden die L-Systeme 1,2,3.. gekenn-zeichnet. 0 steht für Kontext freie.
Einführung
Lindenmayer-Systeme
Es sei V ein Alphabet (a1, a2, a3, ... an), V* die Menge aller möglichen Wörter aus V und V+ die Menge aller mög-lichen Wörter aus V ohne {}.
Ein 0L-System ist das geordnete Tripel [V,,P],in dem V das Alphabet V+ ein nichtleeres Wort genannt Axiom und P VxV+ eine endliche Menge an Produktionsregeln ist. Eine Produktionsregel (a,) P wird als a geschrie-ben. Der Buchstabe a und das Wort werden Vorgänger und Nachfolger genannt (amerikan. predecessor und successor).
Für jeden Buchstaben a existiert mindestens ein Wort V*, so dass a . Ist kein spezielles Wort für einen be-stimmten Vorgänger a V gegeben, so wird a a der Menge aller P hinzugefügt.
Einführung
Lindenmayer-Systeme
Ein Lindenmayer-Sytem besteht aus drei Arten von Regeln:.einer Startregel,.einer endlichen Menge von Hauptersetzungsregeln und.einer Abbruchregel.
Zur Erzeugung einer Zeichenfolge wird mit der Startregel begonnen, dann werden n-mal die Hauptersetzungsregeln angewendet; zum Schluss tritt die Abbruchregel in Aktion. Die Zahl n heißt Ordnung der erzeugten Zeichenfolge.
Einführung
Lindenmayer-Systeme
Die grundlegende Idee der grafischen Interpretation beruht auf einer Interpretation des Wortes durch eine Turtle.
Man beschreibt dies durch ein sog. Tripel (x,y,), wobei (x,y) die Position im Koordinatensystem darstellt und die Blickrichtung der Turtle.
F : Turtle bewegt sich um einen Schritt der Länge d und zieht dabei eine Linie.
+ : Turtle verändert die Blickrichtung um einen bestimmten Winkel nach rechts.
- : Turtle verändert die Blickrichtung um einen bestimmten Winkel nach links.
Einführung
Lindenmayer-Systeme
Mögliche Anwendungen
Einführung
Lindenmayer-Systeme stellen eine ausgesprochen effiziente Komprimierung von Pflanzen-Modellen dar. Durch den inhä-renten Nichtdeterminismus limitierter Lindenmayer-Systeme lassen sich fast beliebig viele verschiedene – jedoch einander ähnelnde – Pflanzen-Modelle aus einem System ableiten. Zudem erfordert die Berechnung eines statisch implemen-tierten Systems vergleichsweise wenig Aufwand. Es liegt also eine Anwendung nahe, in der große Pflanzenbestände gene-riert werden müssen. Zum Beispiel bei der Simulation eines Waldes in Computerspielen oder in Applikationen zur Land-schaftsplanung limitierte Lindenmayer-System zum Einsatz kommen, bei denen die Bäume in Echtzeit nur für den gerade sichtbaren Ausschnitt berechnet werden.
Aus einer Studienarbeit von Frank Böhmer (TU Braunschweig, 2002 Seite 10)
Lindenmayer-Systeme
Für das Wachstum sind Elemente aus zwei verschiedenen Bakterientypen verantwortlich, die sich durch ihre Größe sowie durch ihr Teilungsverhalten unterscheiden. Wir nennen sie A und B. Da beide Typen asymmetrisch aufgebaut sind, können sie in der Kette entweder nach links oder nach rechts orientiert sein. Es gibt daher vier unterschiedliche Elemente.
Die Bakterie Anabaena Catenula
Lindenmayer-Systeme
Das Alphabet V des L-Systems beschränkt sich auf vier Zeichen.
Die Bakterie Anabaena Catenula
Eine nach rechts orientierte A-Baktereie teilt sich nach einer gewissen Zeit in eine nach rechts orientierte B-Bakterie und in eine nach links orientierte A-Bakterie und sowie auch spiegelverkehrt. Es ergibt sich folgende Produktionsregel:
Lindenmayer-Systeme
Für die B-Bakterien gelten folgende Produktionsregeln (p3 und p4):
Die Bakterie Anabaena Catenula
Was jetzt noch fehlt ist eine Startbakterie. Wir erhalten damit:
Lindenmayer-Systeme
Vom Axiom ausgehend und die Produktionsregeln anwendend erhält man eine Sequenz von Zeichenketten, die die verscheidenen Wachstumsstadien von Anabanea Catenula entsprechen.
Die Bakterie Anabaena Catenula
Lindenmayer-Systeme1. Beispiel
Das Alphabet besteht aus:V = {a,b}Das Axiom lautet: = aDie Produktionsregeln lauten:p1 : a bp2 : b ba
Damit ergibt sich für die Evolutionen:
g0 = ag1 = bg3 = bag4 = babg5 = babbag6 = babbababusw.
Lindenmayer-Systeme1. Beispiel
Damit ergibt sich für die Evolutionen:
g0 = ag1 = bg3 = bag4 = babg5 = babbag6 = babbabab
usw.
Bestimmt man die Länge der jeweiligen Zeichenkette, so erhält man die Fibonacci-Folge
1 – 1 – 2 – 3 – 5 – 8 -13 – 21 -34 – 55 – 89 - …..
Lindenmayer-Systeme2. Beispiel
Das Alphabet besteht aus:V = {F,+,+}Das Axiom lautet: = FDie Produktionsregeln lauten:p1 : F F - F + + F - Fp2 : + +p3 : - -
Damit ergibt sich für die Evolutionen:
g0 = F
g1 = F - F + + F - F
usw.
Lindenmayer-SystemeBefehle der Turtle
Symbol Turtle-AktionF Gehe einen Schritt vor und zeichne eine Linie"+ Drehe nach links um den Winkel alpha"- Drehe nach rechts um den Winkel alpha
[Lege den aktuellen Zustand der Schildkröte auf einen Stack. Der Zustand beinhaltet Position und Richtung der Schildkröte
]Bewege die Schildkröte zum zuletzt abgespeicherten Zustand. Dabei wird keine Linie gezeichnet.
Lindenmayer-Systeme
Befehle der Turtle
X Eine Ecke ist Ausgangspunkt (x-Koordinate)
Y Eine Ecke ist Ausgangspunkt (y-Koordinate)
G Ebenfalls ein Generator, ähnlich wie F
f Vorwärtsbewegung ohne zu zeichnen
Z Zufallsfarbe
< Die Farbnummer wird um 1 verkleinert
> Die Farbnummer wird um 1 vergrößert
C Gefolgt von 000 bis 255 (gewählte Farbe)
Lindenmayer-SystemeErste einfache fraktale Kurven
Die Kochkurve
Axiom: F
Ersetzungsregel: F F+F - -F+F
Winkel: = 60o
Lindenmayer-SystemeErste einfache fraktale Kurven
Die Kochkurve
Axiom: F
Ersetzungsregel: F F+F- -F+F
Winkel: = 60o
Lindenmayer-SystemeErste einfache fraktale Kurven
Die Kochsche Schneeflocke
Axiom: F - - F - - F
Ersetzungsregel: F F+F- -F+F
Winkel: = 60o
Lindenmayer-SystemeErste einfache fraktale Kurven
Die Peano Kurve
Axiom: X
ErsetzungsregelX XFYFX+F+YFXFY-F-XFYFXY YFXFY-F-XFYFX+F+YFXFYWinkel: = 90o
Lindenmayer-SystemeErste einfache fraktale Kurven
Die Peano Kurve
Axiom: X
ErsetzungsregelX XFYFX+F+YFXFY-F-XFYFXY YFXFY-F-XFYFX+F+YFXFYWinkel: = 90o
Lindenmayer-SystemeErste einfache fraktale Kurven
Die Hilbert Kurve
Axiom: X
ErsetzungsregelX -YF+XFX+FY-Y +XF-YFY-FX+
Winkel: = 90o
Lindenmayer-SystemeErste einfache fraktale Kurven
Die Hilbert Kurve
Axiom: X
ErsetzungsregelX -YF+XFX+FY-Y +XF-YFY-FX+
Winkel: = 90o
Lindenmayer-SystemeErste einfache fraktale Kurven
Das Sierpinski Dreieck - 1.Version
Axiom: F-F-F
ErsetzungsregelF->F-F+F+F-F
Winkel: = 120o
Lindenmayer-SystemeErste einfache fraktale Kurven
Das Sierpinski Dreieck- 2.Version
Axiom: FXF + + FF + + FF
ErsetzungsregelFF FFX ++ FXF - - FXF - - FX ++
Winkel: = 60o
Lindenmayer-SystemeErste einfache fraktale Kurven
Das Sierpinski Dreieck
Axiom: FXF + + FF + + FF
ErsetzungsregelFF FFX ++ FXF - - FXF - - FX ++
Winkel: = 60o
Lindenmayer-SystemeSträucher und Bäume - zweidimensional
Ein einfacher Baum
Axiom: FErsetzungsregelF F[+F][-F]
Winkel: = 45o
Lindenmayer-SystemeSträucher und Bäume - zweidimensional
Axiom: F
ErsetzungsregelF F[+F]F[-F]F
Winkel: = 25,7o
Strauch 1 Strauch 2Axiom: FErsetzungsregelF F[+F]F[-F][F]Winkel: = 20,0o
Strauch 3Axiom: FErsetzungsregelF FF-[-F+F+F]+[+F-F-F]
Winkel: = 22,5o
Strauch 4Axiom: XErsetzungsregelX F[+X]F[-X]XF FF
Winkel: = 20,0o
Strauch 5Axiom: XErsetzungsregelX F[+X][-X]FXF FF
Winkel: = 25,7o
Strauch 6Axiom: XErsetzungsregelX F-[[X]+X]+F[+FX]-XF FFWinkel: = 22,5o
Lindenmayer-SystemeSträucher und Bäume - zweidimensional
Axiom: F
ErsetzungsregelF F[+F]F[-F]F
Winkel: = 25,7o
Strauch 1
Lindenmayer-SystemeSträucher und Bäume - zweidimensional
Axiom: F
ErsetzungsregelF F[++F-F]F[--F+F]F
Winkel: = 180/14o
Strauch
Lindenmayer-SystemeSträucher und Bäume - zweidimensional
Axiom: F
ErsetzungsregelF FF+[+F-F-F]-[-F+F+F]Winkel: = 25o
Strauch
Lindenmayer-SystemeSträucher und Bäume - zweidimensional
Axiom: F
ErsetzungsregelF F[++++++++ F++++++++F]F[-------- F--------F]-F
Winkel: = 1o
Strauch
Lindenmayer-SystemeSträucher und Bäume - zweidimensional
Axiom: F
ErsetzungsregelF FF+[+F-F[-F]+F]-[-F+F[+F]-FF]
Winkel: = 25o
Strauch
Lindenmayer-SystemeSträucher und Bäume - zweidimensional
Axiom: F
ErsetzungsregelF FF+[+F—F+F]-[-F+F-F]Winkel: = 26o
Strauch
Sträucher und Bäume – mit Mathematica
Lindenmayer-Systeme
n=3; ultraSchildkroete[ {"V"->"VV+[+V-V[-V]+V]-[-V+V[+V]-VV]"},"VZ",n,180/8, 1.,{0,0},{0,1},6,(16*10^n+5)/7];
Sträucher und Bäume – mit Mathematica
Lindenmayer-Systeme
n=4; ultraSchildkroete[{"V"->"VV+[+V--V+V]-[-V+V-V]"},"VZ",n,26, 1.,{0,0},{0,1},6,(8^n+1)/3];
Sträucher und Bäume – mit Mathematica auch dreidimensional
Lindenmayer-Systeme
pflanze1[n_]:= botanic3D[{"x"-> "vdddvxzuuurrrddvxzuurrddvxzuurrrvvzrrddv P2+v-vv-v++z-zz-z+GxzuurrdddvP2+v-vv-v++z-zz-z+G xzuuurrrddvP2+v-vv-v++z-zz-z+Gxzuurzz"}, "x",n,{12,45,15},1.,{0.,0.,0.}, {{0,0,1},{0,1,0},{1,0,0}}];
pflanze1[2];
pflanze2[n_]:= botanic3D[{"x"-> "kkx-kxddrrblluuuurrbllddh+rrrr+ ixrblj-rr-ixddrbluurrukk (ddmuurddmuurddmuurddmuurddmuurddmuurddmuurddmuur) hhdlluurrbllddj++kxrblh-kkrrhhhh", "k"->"vvv","h"->"zzz","i"->"vvvv","j"->"zzzz", "m"->"P5-v+v+v++++v+v+v+++++G", "b"->"dP2-vv+vvv+vv++++vv+vvv+vv+++++Gu"}, "x",n,{25,45,30},1.,{0.,0.,0.}, {{0,0,1},{0,1,0},{1,0,0}}]; pflanze2[4];
Lindenmayer-SystemeSträucher und Bäume – mit Mathematica auch dreidimensional
Sträucher und Bäume – mit Mathematica auch dreidimensional
Lindenmayer-Systeme
pflanze2[4];
pflanze3[4];
pflanze3[n_]:= botanic3D[{"x"-> "-kxddrrblluuuurrbllddh+rrr-ixddrbluuuurrbllddj+rrr -ixddrbluuuurrbllddj+kkxrr (ddmuurrddmuurrddmuurrddmuurrrdmurrdmurrdmurrdmur) llrrhh", "k"->"vvv","h"->"zzz","i"->"vvvv","j"->"zzzz", "m"->"P3-v+v+v++++v+v+v+++++G", "b"->"dP1-vv+vvv+vv++++vv+vvv+vv+++++Gu"}, "x",n,{25,45,30},1.,{0.,0.,0.}, {{0,0,1},{0,1,0},{1,0,0}}];
Sträucher und Bäume – mit Mathematica auch dreidimensional
Lindenmayer-Systeme
pflanze3[4];
Lindenmayer-SystemeSträucher und Bäume – mit Mathematica auch dreidimensional
rose[2];
rose[n_]:= botanic3D[{"x"-> "kkk---vddddrrblluuuuuuuurrbllddddz+++vrrr---vrblz+++ vrrr---vddddrbluuuuuuuurrbllddddz+++ krr(ddmuurrddmuurrddmuurrddmuurrrdmurrdmurrdmurrdmur) llrrhzzhhh", "k"->"vvv","h"->"zzz", "m"->"P5--v++v++v++v++v++v++++G", "b"->"dP1-v+v+v++++v+v+v+++++Gu"}, "x",n,{15,45,30},1.,{0.,0.,0.}, {{0,0,1},{0,1,0},{1,0,0}}];
Sträucher und Bäume – mit Mathematica auch dreidimensional
Lindenmayer-Systeme
rose[2];
Sträucher und Bäume – mit Mathematica auch dreidimensional
Lindenmayer-Systeme
Kommerzielle Programme – Xfrog 3.5
Seite für XFrog3.5http://www.xfrogdownloads.com/greenwebNew/products/xfrogSubStart.htm
Startseite von Greenworkshttp://www.xfrogdownloads.com/greenwebNew/products/productsSubStart.htm
Lindenmayer-Systeme
Kommerzielle Programme – Xfrog 3.5
Lindenmayer-Systeme
Seite für XFrog3.5http://www.xfrogdownloads.com/greenwebNew/products/xfrogSubStart.htm
Kommerzielle Programme – Xfrog 3.5
Lindenmayer-Systeme
Kommerzielle Programme – Xfrog 3.5
Lindenmayer-Systeme
Aufgaben