Interaktive L-Systeme

lsys_trees

L-Systeme sind eine effiziente Methode, um Regeln für die prozedurale Erzeugung von Objekten zu beschreiben und werden häufig verwendet, um das Wachstum von Pflanzen zu modellieren. Sie bestehen aus einer Menge von geordneten Ersetzungsregeln, die auf einen String angewendet werden, der die gewünschten Objekte beschreibt. Durch wiederholtes Anwenden der Ersetzungsregeln entsteht dabei jeweils eine neue Generation des Ojekts. Die Effektive Form der Objekte hängt davon ab, wie die Zeichen des Strings interpretiert werden. Für komplexere Strukturen werden die Zeichen des Strings meist durch komplexe Module ersetzt, welche zusätzliche Werte wie beispielsweise den Rotationswinkel eines Astes oder die in ihm gespeicherten Nährstoffe beschreiben können. Solche Regeln eignen sich gut, um Verzweigungsmuster und Wachstum von fraktalen Objekten wie Bäume zu beschreiben. L-Systeme werden oft erweitert um ‚kontextsensitiv‘ zu sein und damit die Objekte auf ihre eigene Struktur reagieren zu lassen. Andere Erweiterung beinhalten Reaktionen auf die Umgebung durch Regeln die Nährstoffaufnahme und Nährstofftransport oder sogar Kollisionsberechnung beschreiben.

Allerdings lässt sich mit diesen Erweiterungen vor allem in explizit definierten Umgebungen nicht immer angenehm arbeiten. Je mehr Funktionen zu den Regeln hinzugefügt werden desto komplexer wird es sie zu schreiben. Dies ist besonders problematisch, da die Regeln nur das Verhalten kleiner Bausteine der Objekte beschreiben und nicht das Objekt als ganzes. Ein noch größeres Problem besteht darin, dass Änderungen z.B. am phsikalischen Verhalten einer Simulation nur umgesetzt werden kann, indem die Regelmengen aller Objekte überarbeitet werden. Als Alternative wird in diesem Projekt ein zweiseiter Ansatz verwendet. Das generell Wachstum basierend auf Nährstoffen und die direkte Interaktion wird mit den Ersetzungsregeln und Ersetzungsoperatoren behandelt. Rückgeführte Interaktion wie Kollision mit der physikalischen Umgebung wird behandelt, nachdem die prozeduralen Strukturen interpretiert wurden, so dass die entstehenden Objekte in einer Physikberechnung verwendet werden können. Die Reaktion wird dann in der Physik-Engine berechnet und in Form von neuen und aktualisierten Modulen direkt in die prozeduralen Objekte integriert. Auf diese Weise wird die Schleife geschlossen und die aktualsierte physikalische Form kann für das Erzeugen der nächsten Generation verwendet werden. Im folgenden Beispiel wird das Wachstum eines Baums durch eine umgebende Box eingeschränkt, indem neue Module aus der physikalischen Berechnung direkt in die Beschreibung des Bausm eingefügt werden. Die Regelmengen für den frei wachsenden Baum und den eingeschränkten Baum unterscheiden sich dabei nur durch ein paar wenige Zeilen Code zur Aktivierung der Kollisionsberechnung.