Aus Das deutschsprachige Scratch-Wiki
Ein Fraktal ist ein Schema (oder Muster), welches ein Bild erzeugt. Fraktale kommen auch sehr häufig in der Natur vor. Bekannte Fraktale sind z.B. das Sierpinski-Dreieck, die Koch-Kurve
oder die Mandelbrot-Menge
.
Fraktale werden meist in mehreren Schritten, sogenannten Iterationen aufgebaut. Jede Iteration verfeinert das Fraktal. Das Fraktal selbst benötigt theoretisch unendlich viele Iterationen, kann aber in der Praxis mit einer endlichen Anzahl von Iterationen angenähert werden.
Inhaltsverzeichnis
Koch-Kurve
Die Koch-Kurve ist ein relativ simples Fraktal, welches deshalb auch sehr einfach in Scratch implementiert werden kann. Wie der Name schon sagt, besteht dieses Fraktal nur aus einer Linie. Die Koch-Kurve ist Bestandteil der Koch-Schneeflocke.
Die Koch-Kurve wird in mehreren Schritten gezeichnet. Am Anfang hat man nur eine gerade Linie. Dann wird in jedem Schritt die Linie in drei gleich große Teile geteilt. Aus dem mittleren Teil wird eine "Spitze". Dieser Prozess wird für alle jetzt entstandene Linien wiederholt. Das sind die Iterationen.
Programmierung in Scratch
Das Dreieck, durch das das mittlere Drittel einer Linie ersetzt wird, ist gleichseitig. Das bedeutet auch, dass jeder Winkel 60° beträgt.
Dann müssen die Winkel, um die sich der Malstift dreht, berechnet werden.
Mit diesem Wissen kann jetzt auch schon die erste Iteration der Koch-Kurve gezeichnet werden.
Wenn die grüne Flagge angeklickt setze Richtung auf [90v] gehe zu x: (-240) y: (-179) wische Malspuren weg schalte Stift ein male die erste Iteration mit Länge (480) schalte Stift aus Definiere male die erste Iteration mit Länge (länge) gehe ((länge)/(3))er-Schritt drehe dich nach links um (60) Grad gehe ((länge)/(3))er-Schritt drehe dich nach rechts um (120) Grad gehe ((länge)/(3))er-Schritt drehe dich nach links um (60) Grad gehe ((länge)/(3))er-Schritt
Wenn man allerdings mehrere Iterationen durchführen will, ist das hier sehr unpraktisch. Da bietet sich Rekursion an. Das heißt, statt dem "gehe (länge / 3)er-Schritt"-Block der eigene Block nochmal aufgerufen, mit einem drittel der Länge. Das könnte z.B. so aussehen:
Wenn die grüne Flagge angeklickt setze Richtung auf (90 v) gehe zu x: (-240) y: (-179) wische Malspuren weg schalte Stift ein male (4) Iterationen mit Länge (480) schalte Stift aus Definiere male (iterationen) Iterationen mit Länge (länge) falls <(iterationen)=(1)> dann gehe ((länge)/(3))er-Schritt sonst male ((iterationen)-(1)) Iterationen mit Länge ((länge)/(3)) ende drehe dich nach links um (60) Grad falls <(iterationen)=(1)> dann gehe ((länge)/(3))er-Schritt sonst male ((iterationen)-(1)) Iterationen mit Länge ((länge)/(3)) ende drehe dich nach rechts um (120) Grad falls <(iterationen)=(1)> dann gehe ((länge)/(3))er-Schritt sonst male ((iterationen)-(1)) Iterationen mit Länge ((länge)/(3)) ende drehe dich nach links um (60) Grad falls <(iterationen)=(1)> dann gehe ((länge)/(3))er-Schritt sonst male ((iterationen)-(1)) Iterationen mit Länge ((länge)/(3)) ende
Koch-Kurve
Schau' dir dieses Projekt auf der Scratch-Webseite an...
Koch-Schneeflocke
Man kann auch statt einer einzigen Linie ein gleichseitiges Dreieck als Startbild benutzen. Die oben beschriebenen Schritte werden dann für alle drei Linien des Dreiecks durchgeführt. Das ist die Koch-Schneeflocke.
Mandelbrot-Menge
Die Mandelbrot-Menge ist eine Gruppe von Zahlen (eine Menge), welche allesamt eine bestimmte Eigenschaft aufweisen. Diese Zahlen sind komplexe Zahlen.
Komplexe Zahlen
Komplexe Zahlen sind eine andere Art von Zahlen. Diese Zahlen bestehen im Grundprinzip aus 2 einzelnen Zahlen. Die erste Zahl nennt man den "Realteil" der komplexen Zahl und die zweite Zahl nennt man "Imaginärteil". Warum das so ist, ist nicht so wichtig (Andernfalls auf Wikipedia nachlesen). Dass eine komplexe Zahl aus zwei Teilen besteht, bedeutet, dass man eine komplexe Zahl nicht mit einem Zahlenstrahl darstellen kann, weil sie nicht 1-dimensional sondern 2-dimensional ist. Zur Darstellung einer komplexen Zahl wird in der Praxis häufig ein Koordinatensystem benutzt.
Es gibt verschiedene Schreibweisen für komplexe Zahlen. Es gibt einmal folgende Schreibweise: (Realteil|Imaginärteil). Eine komplexe Zahlen mit Realteil 3 und Imaginärteil 4 würde man also so schreiben: (3|4). Möglich wäre auch eine andere Schreibweise: Realteil+i*Imaginärteil. Eine komplexe Zahlen mit Realteil 3 und Imaginärteil 4 sähe hier so aus: 3+i*4. Hier wird beides verwendet, je nachdem ob es passt.
Wenn der Realteil der ersten Zahl a ist, der Imaginärteil der ersten Zahl b, der Realteil der zweiten Zahl c, der Imaginärteil der vierten Zahl d und das Ergebnis e, dann werden Grundrechenarten wie folgt durchgeführt:
Zur Addition zweier komplexer Zahlen werden einfach die beiden Realteile und die beiden Imaginärteile addiert.
e= a+c+i*b+d
Die Multiplikation ist etwas schwieriger. Der Realteil des Ergebnisses ist die Differenz zwischen dem Produkt der Realteile der ersten und der zweiten Zahl und dem Produkt der Imaginärteile der ersten und zweiten Zahl. Der Imaginärteil des Ergebnisses ist die Summe des Produktes des Realteils der ersten Zahl und des Imaginärteils der zweiten Zahl und des Produktes des Imaginärteils der ersten Zahl und des Realteils der zweiten Zahl.
e= (a*c-b*d)+i*(a*d+b*c)
Subtraktion und Division braucht man für die Mandelbrot-Menge nicht.
Die Formel
Man muss wissen: Ein Bild vom Mandelbrot-Fraktal ist eigentlich ein Koordinatensystem, auf dem viele komplexe Zahlen dargestellt sind. Jeder Pixel ist eine komplexe Zahl im Koordinatensystem.
Die Definition der Mandelbrot-Menge kann man so beschreiben: Eine komplexe Zahl c gehört zu der Mandelbrot-Menge wenn sie in der Folge z beschränkt bleibt.
Was bedeutet das jetzt? C ist die Zahl, für die geprüft werden soll, ob sie in der Mandelbrot-Menge enthalten ist. Z ist eine Reihe von Zahlen, die berechnet werden muss. Das "nullte" Element von z ist 0 (bzw. Realteil 0, Imaginärteil 0). Ein Element von z ist gleich die Summe von c und dem Quadrat der vorherigen Zahl. Die vierte Zahl von z ist also gleich 3. Zahl von z, zum Quadrat, plus c. Man muss immer daran denken, dass alle Zahlen von z und c komplex sind. Jede Berechnung eines neuen Elements von z ist eine Iteration. Wenn das letzte Element von z kleiner als 2 ist (Realteil kleiner 2 u. Imaginärteil kleiner 2), gehört c, also die Zahl welche geprüft wird, definitiv nicht zur Mandelbrot-Menge.
Dieser Vorgang muss für alle komplexen Zahlen, die geprüft werden sollen, einzeln durchgeführt werden. Hier sind zwei Beispiele:
Erstes Beispiel
Die komplexe Zahl die überprüft werden soll ist (-0.2|0.5). Das ist also c. Die Folge z muss jetzt berechnet werden. Wichtig ist, dass z0=(0|0) ist. Jetzt wird in jedem Schritt ein neues Element von z berechnet.
zn=zn-12+c
z1 = z02+(-0.2|0.5) = (0|0)2+(-0.2|0.5) = (-0.2|0.5)
z2 = z12+(-0.2|0.5) = (-0.2|0.5)2+(-0.2|0.5) = (-0.41|0.3)
z3 = z22+(-0.2|0.5) = (-0.41|0.3)2+(-0.2|0.5) = (-0.122|0.254)
z4 = z32+(-0.2|0.5) = (-0.122|0.254)2+(-0.2|0.5) = (-0.25|0.438)
z5 = z42+(-0.2|0.5) = (-0.25|0.438)2+(-0.2|0.5) = (-0.329|0.281)
...
Hier sind 5 Iterationen aufgeführt. Das letzte Element von z ist kleiner als 2, also ist (-0.2|0.5) wahrscheinlich in der Mandelbrot-Menge. Man kann es nicht zu hundert Prozent sagen, weil man nicht weiß, ob der Wert in den nächsten Iterationen über 2 steigt.
Zweites Beispiel
Die komplexe Zahl die hier überprüft werden soll ist (0.1|0.8).
zn=zn-12+c
z1 = z02+(0.1|0.8) = (0|0)2+(0.1|0.8) = (0.1|0.8)
z2 = z12+(0.1|0.8) = (0.1|0.8)2+(0.1|0.8) = (-0.53|0.96)
z3 = z22+(0.1|0.8) = (-0.53|0.96)2+(0.1|0.8) = (-0.541|-0.218)
z4 = z32+(0.1|0.8) = (-0.541|-0.218)2+(0.1|0.8) = (0.345|1.036)
z5 = z42+(0.1|0.8) = (0.345|1.036)2+(0.1|0.8) = (-0.854|1.515)
z6 = z52+(0.1|0.8) = (-0.854|1.515)2+(0.1|0.8) = (-1.466|-1.788)
z7 = z62+(0.1|0.8) = (-1.466|-1.788)2+(0.1|0.8) = (-0.948|6.042)
Man sieht hier, dass 5 Iterationen nicht ausgereicht hätten. Wäre die 6. Iteration nicht berechnet worden, wäre der Wert noch unter 2. Man würde also vermuten, dass (0.1|0.8) zur Mandelbrot-Menge gehört. Bei Iteration 6 sieht man jedoch das Gegenteil.
Darstellung
Es gibt verschiedene Möglichkeiten zur Darstellung des Mandelbrot-Fraktals. Die einfachste ist, jeden Punkt einer komplexen Zahl auf dem Koordinatensystem schwarz zu färben, wenn er in der Mandelbrot-Menge enthalten ist und weiß zu färben, wenn er nicht in der Mandelbrot-Menge enthalten ist.
Scratch Beispiele
sehr schnell durch Klones!! |
siehe auch:
[wiki=de:Fraktale]Fraktale[/wiki]