L-Systeme gehen auf den ungarischen Botaniker Aristid Lindenmayer zurück und mit den für L-System geltenden Regeln können pflanzenähnliche Strukturen erzeugt werden.

Doch schauen wir uns erst einmal an, was ein L-System ist. Zu einem typischen L-System gehören:

  • Zeichen, die vom Computer zu verschiedenen Befehlen verarbeitet werden;
  • ein Axiom, d.h. ein Wert, mit dem das Programm gestartet wird;
  • Regeln, mit denen ein Zeichen in eine Zeichenfolge umgewandelt wird.

Schauen wir uns einmal ein einfaches Beispiel an:

  • Zeichen: A und B;
  • Axiom: A (der Startwert);
  • Regeln:
    1) A -> AB
    2) B -> A.

Der Computer soll also mit dem Buchstaben A beginnen. In einem ersten Schritt wendet der Computer die Regel 1 an und aus A wird AB. Wenn wir nun das Programm erneut laufen lassen, erhalten wir aus AB zuerst AB und dann B also ABA. In einem weiteren Schritt erzeugt der Computer daraus die Zeichenkette ABAAB und dann ABAABABA usw.

Interessant sind nun die Längen dieser Zeichenfolgen: 1, 2, 3, 5, 8 ... Das sind die Zahlen der sogenannten Fibonacci-Folge, bei denen immer die letzten beiden Zahlen zusammengezählt werden, um die nächste Zahl zu erhalten. In unserem Falle wäre dies 5+8 = 13 und wenn wir die Zeichenfolge ABAABABA noch einmal durch unser Programm laufen lassen, erhalten wir ABAABABBABBAB, eine Zeichenfolge mit 13 Buchstaben.

Bevor wir uns weitere (und raffiniertere) L-Systeme anschauen, wollen wir aber erst einmal ein Programm dafür schreiben, denn bei komplizierteren Systemen wird die Auswertung von Hand ziemlich mühsam.

Das Programm besteht aus vier Teilen:

  1. Einer Reihe von Regeln zum Umwandeln der Zeichen.
  2. Einer Reihe von Befehlen, die einem Zeichen zugeordnet werden.
  3. Einem rekursiven Block, der die Regeln auf Zeichenketten anwenden kann.
  4. Einen Block, der ganz am Schluss die entstandene Zeichenkette in Computerbefehle umwandelt.

Damit wir möglichst flexibel bleiben, speichern wir sowohl die Regeln aus auch die Befehle in eine sogenannte Bibliothek ab. Der Computer kann dann in dieser Bibliothek für einen Buchstaben nachschauen, welche Ersatzregel gilt, respektive, welche Befehle ausgeführt werden müssen.

Programmierung eines L-Systems

Der oberste Block des Programms enthält die Bibliothek mit den Regeln zum Ersetzten der einzelnen Buchstaben. Wenn wir uns die entsprechende Variable anschauen, sehen wir, dass es sich dabei um eine Tabelle handelt.


Wichtig ist, dass wirklich auch alle verwendeten Zeichen in der Tabelle aufgeführt sind, sonst werden nämlich nicht aufgeführte Zeichen bei der Bearbeitung einfach gelöscht, was zu schwer nachvollziehbaren Fehlern führen kann.

Auch der zweite Block erzeugt eine Tabelle, diesmal aber mit den Befehlen, welche der Computer ausführt.


Im Hauptprogramm werden diese beiden Tabellen dann genutzt, um eine entsprechende Grafik zu zeichnen. Damit dies funktioniert müssen wir aber zuerst noch die entsprechenden Blöcke schreiben.

Schauen wir uns zuerst einmal den Block an, der die Zeichenketten bearbeitet.

Block zur Bearbeitung der Zeichenketten

Zuerst definieren wir mit tempstr eine Variable, in die wir die neue Zeichenkette abspeichern können. Anschliessend bearbeiten wir die Zeichenkette, um sie dann am Ende des Blockes an das Programm zurückzuliefern oder sie erneut zu bearbeiten. Der kompliziert aussehende Teil in der Mitte macht nichts anderes, als in der Bibliothek nachzuschauen, ob ein bestimmter Buchstabe existiert und dann die entsprechende Regel für diesen Buchstaben nachzuschlagen. 

Ganz ähnlich funktioniert auch der Block zum Abarbeiten der Befehle. Allerdings ist es dort nicht notwendig, dass sich der Block selbst aufruft oder eine Variable bearbeitet.

Block für die Ausgabe einer Zeichnung

Damit haben wir alle Elemente zusammen, um ein L-System grafisch darzustellen. Die Grösse des L-Systems hängt natürlich davon ab, wie viele Male wir einzelne Zeichen gemäss den Regeln ersetzen. Das folgende Beispiel zeigt die Iterationen 1-4 der im Programm verwendeten Regeln.

Iterationen 1-4 eines einfachen L-Systems

Abhängig von den verwendeten Regeln und Befehlen können ganz unterschiedliche Bilder entstehen. Einige L-Systeme speichern Zwischenpositionen und -winkel ab, um ihre Aufgabe zu erfüllen. Dies gelingt mit diesen beiden Befehlen:

Push- und Pop-Blöcke

Mit dem push-Block kann eine aktuelle Position und Richtung auf einem Stapel abgelegt werden, mit dem pop-Block wird diese wieder aufgerufen und gleichzeitig der entsprechende Eintrag gelöscht.

verschiedene mit einem L-System generierte Pflanzen

Das Programm selbst kannst du anhand mehrerer Beispiele hier ausprobieren: L-System. Versuche das Programm mit eigenen Regeln laufen zu lassen und halte deine besten Versuche in der Galerie zu den L-Systemen fest.

Zuletzt geändert: Montag, 30. August 2021, 17:16