Wenn die Dimension eines Quadrats 2 ist, dann ist die Dimension Großbritanniens 1,21.

 

Dies fiel Kartographen auf, als sie Großbritanniens Küste vermessen wollten und feststellen, dass mit steigender Messgenauigkeit auch die gemessene Küstenlänge zunahm. Und zwar nahm sie bei doppelter Genauigkeit um Faktor ~1,21 zu.

Die gebrochene Dimension war entdeckt, wenn auch noch nicht eindeutig definiert. Dies war am Ende des 19. Jahrhunders. Der Begriff des Fraktals wurde erst im mittleren 20. geprägt.

 

Ein knappes Jahrhundert später schreibe ich als wochenendliche Fingerübung ein paar Fraktalimplementierungen und stelle sie hier zusammen. Ich bin Fan von HTML5, Javascript und Canvas und die meisten meiner Beispiele sind interaktiv. Viel Spaß.

 

 

Sierpiński-Dreieck

Eigentlich wollte ich nur mal ausprobieren, wie ich mit modernen Mitteln im Browser SVG-Grafiken zur Laufzeit erzeugen kann (wäre z.B. praktisch, um live im auf Webseiten QR-Codes zu erzeugen).

Eine SVG-Linie war mit Javascript schnell erzeugt. Enttäuschend. Doch lieber ein Dreick. Ein Sierpiński-Dreieck! (benannt nach dem polnischen Mathematiker Wacław Sierpiński)

 

Die Konstruktion ist einfach: aus einem gleichseitigen Dreieck entferne das mittlere Dreieck, welches sich durch die Seitenhalbierenden ergibt. Drei neue Dreiecke entstehen. Fahre rekursiv unendlich fort.

 

Dabei finden sich folgende Umfänge und Flächen (für jede Iteration n)

 

 

Der Umfang geht mit wachsendem n gegen ∞, der Flächeninhalt geht gegen 0.

Dies ist ein tolles Beispiel für Strukturen, deren Umfang unendlich groß ist, der Flächeninhalt jedoch 0 beträgt. Null und Unendlichkeit zugleich in einem Objekt. <3

 

Und hier ist die Live-Demo:

http://int2byte.de/public/sierpinski/main.html

Und hier geht's zum Code.

Barnsley-Farn

Ein probabilistisch erzeugtes Fraktal. Den Code habe ich auf Rosettacode.org gefunden und ich fand ihn anfangs etwas verwirrend, aber er ist schön kurz. In drei Stufen wird zufällig erzeugten Werten (zwischen 0 und 100) ein Pfad zu einem Blatt eines Blattes eines Zweiges des Stammes zugewiesen, stets auf die Spitze des Farnblattes zulaufend. Werden genügend Zufallspunkte erzeugt, eribt sich ein immer gleiches Bild.

Definiert ist das Fraktal über folgende affine Funktion:

Affin heißt: was vorher nebeneinander lag, liegt nacher auch nebeneinander. Also: was auf der Geraden [0,100] nebeneinander liegt, liegt auch auf dem Farn nebeneinander.

Die Funktion nimmt einen beliebigen Punkt (x,y) auf der Zeichenebene, und weist ihm einen Punkt (a*x + b*y + e, c*x + d*y +f) zu. Im Wesentlichen ist dies eine gebogene Linie – der Stamm – zwischen zwei Punkten (a,b) und (c,d) – denke ich.

Über eine Matrix lassen sich Unter-Linien erzeugen, die vom Hauptstamm abzweigen und wiederum weitere Zweige haben.

Per Programmierung liegen 1% der erzeugten Punkte auf dem Stamm, 8% auf den Zweigen erster Ordnung, 15% auf den zweigen zweiter Ordnung und die restlichen 76% auf den äußeren Blättern (siehe Programm).

Hier Die Standard-Matrix des Barnsley-Farns:

Yeah! Vier Matrix-Zeilen = vier Funktionen.

Je eine für die Stämme/Blätter erster, zweiter, dritter und vierter Ordnung.

 

Hier findet ihr die Demo: http://www.int2byte.de/public/barnsley-fern/main.html

Und hier den Code.

Der Code kann übrigens auch kleine Animationen rendern : )

Julia-Mengen

Ich hatte schon oft von Julia-Mengen (nach Gaston Julia) gelesent, aber lange deren Schönheit ignoriert.

 

Julia-Mengen sind ein Phänomen (… tolles Wort: Phänomen. Es könnte ja auch Phänomän und Phenomen oder Phenomän sein … naja ) … ein Phänomen aus der Mathematik der Folgen komplexer Zahlen. Diese sind hier so definiert:

Für eine gegebene komplexe Zahl h ist ein Punkt z = a+i*b genau dann in der zu h gehörigen Julia-Menge, wenn die Folge Funktionskomposition konvergiert.

fh ist dabei eine Funktion, die je eine komplexe Zahl auf eine andere Abbildet. Die Komposition, also die Verschachtelung der Funktionen mache ich hier in etwa so:

Gleichung Julia-Mengen

Nach z.B. 10-Facher Verschachtelung darf der Abstand der aufeinanderfolgenden Punkte ein gegebenes Epsilon ε nicht mehr überschreiten, damit der Ursprungspunkt zur Julia-Menge zugehörig gezählt wird (wird schwarz gezeichnet, sonst weiß). Je länger auf Konvergenz geprüft wird, also je tiefer die Funktionsverschachtelung von fh ist, desto detaillierter wird das Fraktal gezeichnet.

Das sieht dann so aus:

Das zweite Bild zeigt meiner Meinung nach eindeutig einen kosmischen Riss ;)

Oh, falls ihr mal eine kleine, kompakte Javascript-Klasse für komplexe Arithmetik benötigt: https://gist.github.com/IkarosKappler/bfffe6efe9a92871e48d56346114cd9e

Hier liegt die Demo.

Und hier der Code.

Binärbäume am Arborday

Mein Terminkalender am diesjärigen International Arbor-Day war wieder einmal so voll, dass es bei mir nur für ein Binärbaum-Fraktal gereicht hat.

Die Konstruktion ist einfach:

  1. Zeichne einen Stamm.
  2. Zeichne links einen Ast und rechts einen Ast an dessen Spitze und fahre rekursiv fort.
Folgende Werte lasse sich parametrisieren und über ein HTML-Interface steuern:
  • Iterationstiefe (Anzahl der Verzweigungen)
  • Linker und rechter Astwinkel
  • Linker und rechter Längenfaktor
Achja, ein paar kleine unregulierbare Faktoren stecken auch im Code, damit der Baum nicht so langweilig symmetrisch aussieht.

Hier geht's zur Demo.

Hier geht's zum Code.

P.S.: Er ist orange-blau. Die Farben des Sci-Fi.

Lévy C-Curve

Dies ist ein relativ einfaches Fraktal und wurde ca. 1910 das erste mal beschrieben: Die Lévy-C-Kurve oder Lévy-C-Drache.

Es ist die vereinfachte Variante der Drachenkurven und konstruiert sich so:

  • Zeichne eine Linie a zwischen den den Punkte A und B.
  • Denke dir a als Hypotenuse eines gleichschenkligen rechtwinkligen Dreiecks und bilde die Katheten aL und aR.
  • Fahre rekursiv mit aL und aR fort.

Es entsteht eine C-Förmige Struktur, das Lévy-C-Fraktal.

Hier geht der zu interaktiven Demo.

Und hier findet ihr den Code.

Und als nächste Fingerübung: Koch-Schneefloche, Mandelbrot-Menge, Pythagoräischer Baum oder Menger-Schwamm?