Python, das turtle-Modul und Fraktale
Ich hätte ja nicht gedacht, dass es so lustig sein kann, mit Fraktalen herumzuexperimentieren … aber das kann es doch. Ein bisschen Interesse natürlich vorrausgesetzt.
Mit Hilfe des Lehrmaterials “Turtle-Grafik und Fraktale Geometrie” (http://miami.uni-muenster.de/servlets/DocumentServlet?id=1522) konnte ich auch recht schnell einsteigen. Die Schilderungen und die Quelltexte sind auf das Modul turtle bezogen und sind somit grundsätzlich plattformunabhängig. Dennoch empfehle ich Python für diese Experimente, denn dort ist das turtle-Modul bereits integriert und lässt sich phänomenal einfach verwenden.
Das turtle-Modul
Das turtle-Modul ist eine Sammlung an Funktionen, mit deren Hilfe sich ein “Malstift” bzw. “turtle” steuern lässt. Mit Anweisungen wie left(), right(), forward() und backward() kann man einfachste Bewegungen koordinieren. Packt man derartige Anweisungen in rekursive Funktionen, so ergibt sich mit etwas Glück ein immerwiederkehrendes selbstähnliches Gebilde – ein Fraktal.
Die Dokumentation des pythoneigenen turtle-Moduls ist hier zu finden:
http://docs.python.org/lib/module-turtle.html
Die Kochkurve
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | # coding=UTF-8 from turtle import * import time def kochkurve(t, s): if(t==0): # wenn die gewünschte rekursionstiefe (sprich: feinheit der bewegungen) erreich ist, # soll das ganze auf dem bildschirm umgesetzt werden forward(s) else: # die bewegungen der "turtle" werden rekursiv verfeinert kochkurve(t-1, s/3) left(60) kochkurve(t-1, s/3) left(-120) kochkurve(t-1, s/3) left(60) kochkurve(t-1, s/3) # koch'sche schneeflocke, zusammengesetzt aus mehreren kochkurven kochkurve(3, 100) left(-90) color(1,0,0) kochkurve(3, 100) left(-90) color(0,1,0) kochkurve(3, 100) left(-90) color(0,0,1) kochkurve(3, 100) # die methode done(), die die hauptschleife betritt, ist offenbar nicht verfügbar :-( time.sleep(10) done() |
Die Rekursionstiefe (t) bestimmt die Feinheit der Bewegungen. Der Parameter s definiert die Gesamtlänge der Kochkurve.
Ich habe die Funktion am Ende mehrfach aufgerufen, sodass eine sogenannte Koch’sche Schneeflocke entsteht. Eine Koch’sche Schneeflockte besteht aus mehreren Kochkurven, die man aneinandergehängt hat. Und hängt man 4 Kochkurven im Winkel von 90° aneinander, so ergibt sich folgendes Gebilde:
Der fraktale Baum
Fraktale Bäume haben mich irgendwie schon immer beschäftigt. Man stelle sich einen Körper vor, von dem etliche Zweige und Äste abgehen. Von jedem Zweig und jedem Ast gehen erneut ebensoviele Zweige und Äste ab – diesmal nur wesentlich kleiner. Und von diesen kleinen Ästen gehen wieder Äste ab … immer wieder … und jedes Mal werden sie kleiner. Ich hatte meinen Spaß daran mir den kleinsten denkbaren Ast vorzustellen. Natürlich hatte dieser Gedankengang nie ein Ende. Aber wenn man jung ist…
Mit dem turtle-Modul lassen sich natürlich auch fraktale Bäume erzeugen.
Z.Bsp. hiermit:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # coding=UTF-8 from turtle import * import time def baum(s,t): if(t >= 0): forward(s) left(30) baum(s*0.6, t-1) right(75) baum(s*0.7, t-1) left(45) backward(s) sety(-100) baum(100,7) # die methode done(), die die hauptschleife betritt, ist offenbar nicht verfügbar :-( time.sleep(10) done() |
Mit Hilfe des Parameters t lässt sich auch hier die Rekursionstiefe festlegen.
Der Code ergibt, wenn man ihn mit dem Python-Compiler aufruft, folgendes:
Selbstverständlich lassen sich Winkel und Streckenlängen variieren. In diesem konkreten Fall ist der linke Ast um 30° (nach links), der rechte um 45° (nach rechts) abgewinkelt. Der linke Ast hat die Länge 0,6*s – das entspricht 60% der Länge des Mutterastes. Der rechte Ast hat jeweils die Länge 0,7*s – also 70% der Länge des Mutterastes.
Weitere Anregungen
Fischpopulationen im Lehrerzimmer mit Tkinter (kleine Andeutung am Rande
)



Hallo ich würde mal gern wisen hab in der Schule Informatik naja gefällt mir net so mich interresiert das turtle module muss man sich des erst wo runterladen um das verwedenen zu könnnen (auf meinem pc jetzt also nicht auf den pc in der schule)
Kommentar by Domi — 21.06.2007 @ 14:37:39
Hallo,
das turtle-Modul baut auf dem Tkinter-Modul auf, welches in den Python-Versionen für die meisten Systeme (Unix, Linux, Windows, uvm.) enthalten ist.
Bei mir funktionieren die Skripte, die ich in meinem Artikel beschreibe, sowohl unter Linux (Kubuntu Feisty Fawn) als auch unter Windows XP. Das kann ich also selbst bestätigen.
MfG, Robert Nitsch
Kommentar by Robert Nitsch — 22.06.2007 @ 18:05:31