Lindenmayer-Systeme, kurz L-Systeme genannt, sind “Ersetzungs-Systeme”: Bei einem (grafischen) Objekt werden Teile davon ersetzt, im einfachsten Fall durch das verkleinerte Objekt selbst. Das wird wiederholt, beispielsweise rekursiv. Dadurch kann eine sehr komplexe fraktale Struktur entstehen und gleichzeitig sehr simpel definiert sein.
Das einfachste Beispiel ist die Koch-Kurve, auch als Schneeflockenkurve genannt. Wer sie nicht kennt, einfach den Links zur Wikipedia folgen. 🙂 Ich möchte sie hier ja nicht erklären, sondern nur kurz zeigen, wie man sie mit TikZ auf einfachste Weise erzeugen kann.
Bausteine sind Symbole für einfache grafische Operationen wie Zeichnen einer Linie oder Drehen um einen Winkel, diese Symbole werden in einer Zeichenkette angegeben, Teile dieser Zeichenkette werden durch “Produktionsregeln” schrittweise ersetzt. Die Kette wird immer länger, am Ende wird diese Zeichnung ausgeführt.
Im TikZ-Handbuch sind die Regeln im Kapitel 55 erklärt, das beschreibt die Lindenmeyer-System-Bibliothek, die eigens hierfür geschrieben wurde. Sie stellt eine Syntax zum einfachen Deklarieren eines solchen Objekts samt Regeln bereit und erledigt das Zeichnen.
Zur Motivation ein Dokument mit ein paar Beispiele, das ich mal für TeXample.net geschrieben hatte. Wie man sehen kann, ist jedes der vier Beispiele simpel definiert. Ich habe noch wild Farben und Farbverläufe dazu getan, nur um zu zeigen, dass man mit TikZ noch weiterbearbeiten kann.
\usepackage{tikz}
\usetikzlibrary{lindenmayersystems}
\usetikzlibrary[shadings]
\begin{document}
\pgfdeclarelindenmayersystem{Koch curve}{
\rule{F -> F-F++F-F}}
\pgfdeclarelindenmayersystem{Sierpinski triangle}{
\rule{F -> G-F-G}
\rule{G -> F+G+F}}
\pgfdeclarelindenmayersystem{Fractal plant}{
\rule{X -> F-[[X]+X]+F[+FX]-X}
\rule{F -> FF}}
\pgfdeclarelindenmayersystem{Hilbert curve}{
\rule{L -> +RF-LFL-FR+}
\rule{R -> -LF+RFR+FL-}}
\begin{tabular}{cc}
\begin{tikzpicture}
\shadedraw[shading=color wheel]
[l-system={Koch curve, step=2pt, angle=60, axiom=F++F++F, order=4}]
lindenmayer system — cycle;
\end{tikzpicture}
&
\begin{tikzpicture}
\shadedraw [top color=white, bottom color=blue!80, draw=blue!80!black]
[l-system={Sierpinski triangle, step=2pt, angle=60, axiom=F, order=8}]
lindenmayer system — cycle;
\end{tikzpicture}
\\
\begin{tikzpicture}
\shadedraw [bottom color=white, top color=red!80, draw=red!80!black]
[l-system={Hilbert curve, axiom=L, order=5, step=8pt, angle=90}]
lindenmayer system;
\end{tikzpicture}
&
\begin{tikzpicture}
\draw [green!50!black, rotate=90]
[l-system={Fractal plant, axiom=X, order=6, step=2pt, angle=25}]
lindenmayer system;
\end{tikzpicture}
\end{tabular}
\end{document}
Jetzt kann man selber Bäume basteln, berühmte Kurven wie z.B. die Piano-Kurve nachbauen, die Drachenkurve, oder eigene erfinden – viel Spaß beim Ausprobieren!