Eines meiner Dokumente, was sich mit Fraktalen beschäftigt, behandelt IFS-Fraktale (Iterated Function Systems). Ein iteriertes Funktionensystem bedeutet wiederholte Abbildungen eines Raumes in sich selbst, auf diese Weise lassen sich bekannte Fraktale wie das Sierpinski Dreieck, die Koch-Kurve und der Barnsley-Farn erzeugen. Da ich in LaTeX schreibe, stellt sich mir die Frage: wie lassen sich IFS-Fraktale direkt in LaTeX erzeugen und ausgeben? Mögliche Tools wären beispielsweise LuaTeX, expl3, PGF und PostScript für die Berechnung sowie TikZ, PSTricks, pgfplots und mplib für die Ausgabe. Es ließen sich natürlich auch MetaPost und Asymptote integrieren, auch wenn "ein bisschen extern". Ich werde mit einer Antwort mit LuaTeX und pgfplots für den Barnsley-Farn beginnen. Wer schafft alternative Wege für dieses und andere IFS-Fraktale? |
Das folgende kleine Dokument berechnet und druckt einen Barnsley-Farn mittels des sog. Chaos Games: zufällig ausgewählte Transformationen werden wiederholt angewendet. Hier verwende ich Lua zur Berechnung und pgfplots für die Ausgabe. Daher wird LuaLaTeX benötigt. Die Matrix m enthält die Koordinaten für die affinen Transformationen sowie ihre Wahrscheinlichkeiten, die dann summiert separat in der Wahrscheinlichkeitsmatrix pm abgelegt werden, damit ich nicht in der Schleife mehr addieren muss. Die Matrix-Schreibweise vereinfacht Veränderungen der Parameter. Vorsicht, das Übersetzen dauert sehr lang! Ich habe 100000 Punkte berechnen lassen, wer das hier mal laufen lassen will, sollte zunächst einen viel kleineren Wert nehmen. Open in writeLaTeX Code, hier editierbar zum Übersetzen:
Die Matrix kann man verändern, um Fraktale zu erhalten, die mehr einem Baum, einem Busch oder anderen Farnen ähneln. Beispielsweise mit Werten von der oben verlinkten Wikipedia-Seite (m.E. original von David Nicolls) Open in writeLaTeX
Open in writeLaTeX
Mit einer einfacheren Matrix und damit leicht verkürztem Code erhält man ein Sierpinski-Dreieck: Open in writeLaTeX Code, hier editierbar zum Übersetzen:
Analog kann man einen Sierpinski-Teppich erhalten, und in 3D einen Menger-Schwamm aka Menger sponge. Bei letzterem stellt sich dann die Frage einer guten dreidimensionalen Darstellung. |
PSTricks bietet auch einen Barnsley-Farn, in Postscript samt darin codierten Transformations-Parameter und Wahrscheinlichkeiten. Direkt in LaTeX lässt sich daher nicht so leicht experimentieren, doch es ist eine sehr gute Demonstration. Und man kann ja selber auch den Postscript-Code übernehmen und ändern. Anwendung, einfach mit XeLaTeX zu übersetzen oder auch durch LaTeX im DVI Modus mit nachfolgendem dvips und ggf. ps2pdf: Open in writeLaTeX Code, hier editierbar zum Übersetzen:
Der eigentliche Code steht in pst-fractal.pro: Open in writeLaTeX
|