Wir nutzen Cookies, um das allgemeine Benutzerelebnis zu verbessern. Mit der Nutzung unseres Wikis stimmst du der Nutzung von Cookies zu.

Fraktale

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-DreieckWikipedia.jpg, die Koch-KurveWikipedia.jpg oder die Mandelbrot-MengeWikipedia.jpg.

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.

Mandelbrot.png

Koch-Kurve

Kochkurve4Iterationen.png

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.
KochImplementation1.png

Dann müssen die Winkel, um die sich der Malstift dreht, berechnet werden.
KochImplementation2.png

Mit diesem Wissen kann jetzt auch schon die erste Iteration der Koch-Kurve gezeichnet werden.

Wenn gf 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 gf 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...


Die Koch-Schneeflocke nach 7 Iterationen

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

Mandelbrot.png

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.
MandelbrotGleichung.png

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

107716095_144x108.png

Mandelbrot

95388932_144x108.png

Mandelbrot Pen Made Pattern

194167_144x108.png

Super Fast Mandelbrot

20912974_144x108.png

Mandelbrot Set Explorer 2.5

48815918_144x108.png

Koch curve with a Mandelbrot set formula

83837694_144x108.png

Mandelbrot with full details

sehr schnell

durch Klones!!

53610528_144x108.png

mandelbrot

siehe auch:


Code zum Einbinden ins Forum:
[wiki=de:Fraktale]Fraktale[/wiki]