regelbasierte programmierung mit xl winfried kurth reinhard hemmerling btu cottbus, lehrstuhl...

51
Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Upload: kaiser-arensdorf

Post on 05-Apr-2015

106 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Regelbasierte Programmierung mit XL

Winfried Kurth

Reinhard Hemmerling

BTU Cottbus, Lehrstuhl Grafische Systeme

Page 2: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

1. PARADIGMEN DER PROGRAMMIERUNG

Paradigma:

grundlegendes Prinzip, beispielorientierte Vorstellung, zwischen "Modell" und "Analogie" angesiedelt, teilweise exakt, mathematisch unterstützbar, anschaulich, auf virtuellem Niveau.

Paradigmen der Programmierung (nach Floyd 1979):

imperatives Paradigma

objektorientiertes Paradigma

funktionales Paradigma

Fallregel-Paradigma

Page 3: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

1. Imperatives Paradigma(John von Neumann)

liegt der klassischen imperativen Programmierung (Befehls-Programmierung) zugrunde.

Auch: "prozedurales Paradigma", "Kontrollfluss-Paradigma".

Computer = Maschine zur Veränderung von Variablen-werten.

Programm = Plan für den Berechnungsprozess mit Angabe der Befehle und des Kontrollflusses (z.B. Schleifen).

Programmfindung: Elementare Einzelschritte finden und in flexible Reihenfolge bringen.

Programmiersprachen: Fortran, Basic, Pascal, C, Teile von Java.

Page 4: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Beispiel:

x = 0;

while (x < 100)

x = x + 1;

Inhalt der Variable x wird verändert

Schleife legt Kontrollfluss fest

Beachte: "=" steht hier nicht für math. Gleichheit, sondern für Zuweisung (prozesshaft)!

Page 5: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

2. Objektorientiertes Paradigma

Computer = Umgebung für virtuelle Objekte

Programm = Auflistung von (Objekt-) Klassen, d.h. allgemeiner Spezifikationen von Objekten, die zur Laufzeit des Programms (ggf. mehrfach) erschaffen und wieder vernichtet werden können und miteinander kommunizieren.

Programmfindung: Spezifikation der Klassen (Daten und Methoden), die Objektstruktur und -verhalten festlegen.

Programmiersprachen: Smalltalk, Simula, C++, Delphi, Java(in den letzten 4 mit imperativen Konstrukten vermischt)

Page 6: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Beispiel (in Java):

public class Auto extends Fahrzeug

{

public String marke;public int plaetze;

public void anzeigen(){System.out.println("Das Auto ist ein " + marke);System.out.println("Es hat " + plaetze + "Sitze.");}

}

typisch:

Klassen (class) mit Daten (marke, plaetze) und Methoden (anzeigen)

Page 7: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

3. Funktionales Paradigma(applikative Programmierung, McCarthy-Paradigma)

Programmiersprachen: Lisp, Haskell, Lambda-Kalkül, APL

Computer = Maschine, die Verallgemeinerungen von Operationen bilden, d.h. Funktionale definieren kann (vergleichbar der Bildung neuer Begriffe in der Mathematik)

Programm = verschachtelter Ausdruck funktionaler Anwendungen

Programmfindung: Spezifikation von Funktionen, die das Problem lösen

Beispiel (FP-System nach Backus):

def Skalarprod = (/+) ° (a*) ° trans

definiert das Skalarprodukt zweier Vektoren beliebiger Dimension.

Beachte: Keine Sequentialisierung, keine Variablendeklarationen, sehr kompakte Programme möglich.

Page 8: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

4. Fallregel-Paradigma(van Wijngaarden, Lindenmayer)

Computer = Transformationsmaschine für Strukturen oder für Zustände.

Es gibt eine aktuelle Struktur, die solange transformiert wird, wie dies möglich ist.

Arbeitsprozess: Such- und Anwendungsprozess.matching: Suchen einer passenden Regel,rewriting: Anwendung der Regel, um die Struktur umzuschreiben.

Programm = Menge von Transformationsregeln.

Programmfindung: Spezifikation der Regeln.

Programmiersprachen: L-Systeme, XL, PROLOG, Intran, KI-Sprachen.

Page 9: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

2. L-SYSTEME (Lindenmayer-Systeme)

analog zu Chomsky-Grammatiken, aber:

in jedem Ableitungsschritt parallele Ersetzung aller Zeichen, auf die eine Regel anwendbar ist

von A. Lindenmayer (Botaniker) 1968 zur Modellierung des Wachstums von fadenförmigen Algen eingeführt

Page 10: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Chomsky-Grammatik für natürliche Sprache:

Satz S P O

S Max

S Tina

P lernt

O Englisch

O Französisch

mögliche Ableitungen:

Satz Satz

S P O S P O

Max lernt Französisch Tina lernt Englisch

Page 11: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

einfaches L-System:

Page 12: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme
Page 13: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

mathematisch:

Ein L-System ist ein Tripel (, , R); darin ist:

eine Menge von Zeichen, das Alphabet,

eine Zeichenkette mit Zeichen aus , das Startwort (auch "Axiom"),

R eine Menge von Regeln der Form

Zeichen Zeichenkette;

darin sind das Zeichen auf der linken Regelseite und die Zeichenkette aus entnommen.

Page 14: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Ein Ableitungsschritt (rewriting) einer Zeichenkette besteht aus der Ersetzung aller Zeichen in , die in linken Regelseiten von R vorkommen, durch die entsprechenden rechten Regelseiten.

Man vereinbart: Zeichen, auf die keine Regeln anwenbar sind, werden unverändert übernommen.

Ergebnis zunächst nur:

Ableitungskette von Wörtern, die sich durch wiederholte Anwendung des rewriting-Vorgangs aus dem Startwort ergeben.

1 2 3 ....

Page 15: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Beispiel:

Alphabet {A, B}, Startwort A

Regelmenge R:

A B

B AB

Ableitungskette:

A B AB BAB ABBAB BABABBAB

ABBABBABABBAB BABABBABABBABBABABBAB

...

wie lang ist die n-te Zeichenkette in dieser Ableitung?

Page 16: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

was für die Modellierung von räumlichen Strukturen noch fehlt:

eine geometrische Interpretation

Füge also zur Def. eines L-Systems hinzu:

eine Abbildung, die jeder Zeichenkette mit Zeichen aus eine Teilmenge des 3-dimensionalen Raumes zuordnet

dann: "interpretierte" L-System-Abarbeitung

1 2 3 ....

S1 S2 S3 ....

S1, S2, S3, ... können als Entwicklungsstufen eines Objekts,

einer Szene oder einer Konfiguration interpretiert werden.

Page 17: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Als Interpretationsabbildung wird meistens gewählt:

Turtle geometry ("Schildkrötengeometrie")

befehlsgesteuertes, lokales Navigieren im 2D- oder 3D-Raum (Abelson & diSessa 1982; vgl. Programmier-sprache "LOGO")

"Turtle": Zeichen- oder Konstruktionsgerät (virtuell)

- speichert (grafische und nicht-grafische) Informationen

- mit einem Zustandsspeicher assoziiert (wichtig für Verzweigungen)

- aktueller Zustand der Turtle enthält z.B. Information über aktuelle Liniendicke, Schrittweite, Farbe, weitere Eigenschaften des als nächstes zu konstruierenden Objekts

Page 18: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Der Turtle-Befehlsvorrat wird zu einer Untermenge der Zeichenmenge des L-Systems. Symbole, die nicht Turtle-Befehle sind, werden von der Turtle ignoriert.

Befehle (Auswahl):

F0 "Forward", mit Konstruktion eines Elements (Linienstück, Segment, Gebäudetrakt...), benutzt wird die aktuelle Schrittweite für die Länge

(die Null steht für "keine explizite Längenfestlegung")

M0 forward ohne Konstruktion (Move-Befehl)

L(x) ändere die aktuelle Schrittweite (Länge) zu x

LAdd(x) inkrementiere die aktuelle Schrittweite um x

LMul(x) multipliziere die aktuelle Schrittweite mit x

D(x), DAdd(x), DMul(x) analog für die aktuelle Dicke

Page 19: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

RU(45) Drehung der turtle um die "up"-Achse um 45°

RL(...), RH(...) analog um "left" und "head"-Achse

up-, left- und head-Achse bilden ein rechtwinkliges, räumliches Koordinatensystem, das von der turtle mitgeführt wird

RV(x) Rotation "nach unten" mit durch x vorgegebener Stärke

Page 20: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Beispiel:

L(100) D(3) RU(-90) F(50) RU(90) M0 RU(90) D(10) F0 F0

D(3) RU(90) F0 F0 RU(90) F(150) RU(90) F(140) RU(90)

M(30) F(30) M(30) F(30) RU(120) M0 Sphere(15) erzeugt

was ist das Ergebnis der Interpretation der Zeichenkette

L(10) F0 RU(45) F0 RU(45) LMul(0.5) F0 M0 F0 ?

Page 21: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Wiederholung von Abschnitten der Zeichenkette möglich mit dem Schlüsselwort "for"

z.B. for ((1:3)) ( A B C )

liefert A B C A B C A B C

was ist das Ergebnis der Interpretation von

L(10) for ((1:6)) ( F0 RU(90) LMul(0.8) ) ?

Page 22: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Verzweigungen: Realisierung mit Speicher-Befehlen

[ lege aktuellen Zustand auf Speicher ("Ablage")

] nimm obersten Zustand von der Ablage und mache diesen zum aktuellen Zustand (damit: Ende der Verzweigung)

Page 23: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Beispiel:

Regeln

A F0 [ RU(45) B ] A ;

B F0 B ;

Startwort L(10) A

(A und B werden normalerweise nicht geometrisch interpretiert.)

Page 24: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

was für eine Struktur liefert das L-System

A [ LMul(0.25) RU(-45) F0 ] F0 B;

B [ LMul(0.25) RU(45) F0 ] F0 A;

mit Startwort L(10) A ?

Page 25: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

was für eine Struktur liefert das L-System

A [ LMul(0.25) RU(-45) F0 ] F0 B;

B [ LMul(0.25) RU(45) F0 ] F0 A;

mit Startwort L(10) A ?

äquivalente Regel:

A [ LMul(0.25) RU(-45) F0 ] F0 RH(180) A;

Page 26: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Weitere Beispiele:

Koch'sche Kurve:

L(50) RU(90) A F0;

A A LMul(0.3333); /* Skalierung */

F0 F0 RU(-60) F0 RU(120) F0 RU(-60) F0;

jedes Linienstück wird durch 4 neue Linienstücke ersetzt (3. Regel); Skalierung durch Hilfssymbol A, welches sich in jedem Schritt reproduziert und dabei jeweils einen zusätzlichen Faktor 1/3 erzeugt (2. Regel).

Das Startwort ist hier " ".

Page 27: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Ausgabe nach 6 Schritten:

Page 28: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Flächenfüllende Kurve:

module R extends RU(-45); /* Vererbungsmechanismus */

module A extends F(10);

Axiom ==> L(100) R X R A R X;

X ==> X F0 X R A R X F0 X;

Page 29: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Sierpinski-Dreieck (Realisierung als geschlossene Kurve, Verwendung von Hilfssymbol X für Insertion des inneren Dreiecks):

L(50) RU(90) B F0 X F0 RU(-120) F0 F0 RU(-120) F0 F0;

F0 F0 F0;

X RU(-120) F0 X F0 RU(120) F0 X F0 RU(120) F0 X F0 RU(-120);

B B LMul(0.5);

Page 30: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Verzweigungsbeispiel:

F0 F0 [ RU(25.7) F0 ] F0 [ RU(-25.7) F0 ] F0 ;

Ergebnis nach 7 Schritten:

(Startwort L(10) F0)

Page 31: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Verzweigung, alternierende Zweigstellung und Verkürzung:

L(10) F0 A ;

A LMul(0.5) [ RU(90) F0 ] F0 RH(180) A ;

Page 32: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

welche Struktur liefert

F(10) A ;

A [ RU(-60) F(6) RH(180) A Sphere(3) ] [ RU(40) F(10) RH(180) A Sphere(3) ];

Sphere Z; ?

(F(n) liefert Linie der vorgegebenen Länge n,Sphere(n) eine Kugel mit Radius n)

Page 33: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Stochastische L-SystemeVerwendung von Pseudozufallszahlen

Beispiel:

deterministisch stochastischfloat c = 0.7;

Axiom ==> L(100) D(5) A;

A ==> F0 LMul(c) DMul(c) [ RU(50) A ] [ RU(-10) A ];

float c = 0.7;

Axiom ==> L(100) D(5) A;

A ==> F0 LMul(c) DMul(c) if (probabiliy(0.5)) ( [ RU(50) A ] [ RU(-10) A ] ) else ( [ RU(-50) A ] [ RU(10) A ] );

Page 34: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Erzeugung einer Zufallsverteilung in der Ebene:

Axiom ==> D(0.5) for ((1:300))

( [ Translate(random(0, 100), random(0, 100), 0)

F(random(5, 30)) ] );

Ansicht von oben schräg von der Seite

Page 35: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Erweiterung des Symbol-Konzepts:

Lasse reellwertige Parameter nicht nur bei Turtle-Kommandos wie "RU(45)" und "F(3)" zu, sondern bei allen Zeichen

parametrische L-Systeme

beliebig lange, endliche ParameterlistenParameter werden bei Regel-Matching mit Werten belegt

Beispiel:

Regel A(x, y) F(7*x+10) B(y/2)

vorliegendes Zeichen z.B.: A(2, 6)nach der Regelanwendung: F(24) B(3)

Parameter können in Bedingungen abgeprüft werden(logische Bedingungen mit Java-Syntax):

A(x, y) (x >= 17 && y != 0) ....

Page 36: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Welche Struktur wird von folgendem L-System erzeugt?

[ RU(90) M(1) RU(90) A(1) ] A(1);

A(n) F(n) RU(90) A(n+1);

Page 37: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Welche Struktur wird von folgendem L-System erzeugt?

[ RU(90) M(1) RU(90) A(1) ] A(1);

A(n) F(n) RU(90) A(n+1);

Variante:

in der zweiten Regel "RU(90)" etwa durch "RU(92)" ersetzen.

Page 38: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Interpretationsregeln

Einbau einer weiteren Regelanwendung unmittelbar vor der grafischen Interpretation (ohne Wirkung auf die nächste Generation)

Interpretationsregel-Anwendung

Turtle-Interpretation

public void run(){ [ Axiom ==> A; A ==> Scale(0.3333) for (i:(-1:1)) for (j:(-1:1)) if ((i+1)*(j+1) != 1) ( [ Translate(i, j, 0) A ] ); ] applyInterpretation();}

public void interpret() [ A ==> Box; ]

Beispiel:

Page 39: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

public void run(){ [ Axiom ==> A; A ==> Scale(0.3333) for (i:(-1:1)) for (j:(-1:1)) if ((i+1)*(j+1) != 1) ( [ Translate(i, j, 0) A ] ); ] applyInterpretation();}

public void interpret() [ A ==> Box; ]

(a)

(b) (c)A ==> Sphere(0.5); A ==> Box(0.1, 0.5, 0.1) Translate(0.1, 0.25, 0) Sphere(0.2);

Page 40: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

was wird durch dieses Beispiel erzeugt?

public void run(){ [ Axiom ==> [ A(0, 0.5) D(0.7) F(60) ] A(0, 6) F(100); A(t, speed) ==> A(t+1, speed); ] applyInterpretation();}public void interpret() [ A(t, speed) ==> RU(speed*t); ]

Page 41: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Kontextsensitivität

Abfrage eines Kontexts, der vorhanden sein muss, damit eine Regel anwendbar ist

Angabe des Kontexts in (* .... *)

Beispiel:

module A(int age);module B(super.length, super.color) extends F(length, 3, color);Axiom ==> A(0);A(t), (t < 5) ==> B(10, 2) A(t+1);A(t), (t == 5) ==> B(10, 4);B(s, 2) (* B(r, 4) *) ==> B(s, 4);B(s, 4) ==> B(s, 3) [ RH(random(0, 360)) RU(30) F(30, 1, 14) ];

Page 42: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Der Schritt zu relationalen Wachstumsgrammatiken

Nachteil von L-Systemen:• in L-Systemen mit Verzweigungen (über Turtle-Kommandos) nur 2 mögliche Relationen zwischen Objekten: "direkter Nachfolger" und "Verzweigung"     

Erweiterungen:

• Zulassen weiterer Relationstypen (beliebig wählbar)• Zulassen von Zyklen ( Graph-Grammatik)

 

Page 43: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

• Grammatik modifiziert dann direkt den Graphen, Umweg über String-Codierung entfällt (bzw. wird nur noch für Regel-Input gebraucht)

"relationale Wachstumsgrammatik"

außerdem Nachteil der Turtle-Interpretation von L-Systemen: Segmente sind nur Zylinder, keine Objekte im Sinne der OOP

Erweiterungen:

• Knoten des Graphen können beliebige Objekte sein (auch Grafikobjekte)

• Einbettung von Code einer höheren, imperativen oder objektorientierten Programmiersprache in die Regeln (für uns: Java)

Page 44: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

3. RELATIONALE WACHSTUMSGRAMMATIKEN (RGG: Relational Growth Grammars)

allgemeiner Aufbau einer Regel einer RGG:

Page 45: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

eine RGG-Regel und ihre Anwendung in grafischer Form:

Regel:

Anwendung:

Page 46: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Kanten-Markierungen repräsentieren verschiedene Artenvon Relationen:

• ist Nachbar von

• enthält

• trägt

• codiert (genetisch)

• ist gepaart mit

• (...)

auch möglich: Darstellung von multiskalierten Strukturen

Page 47: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

RGG als Verallgemeinerungen von L-Systemen:

Zeichenketten entsprechen speziellen Graphen

In Textform schreiben wir allgemeine Kanten als -kantensorte->

Kanten des speziellen Typs "Nachfolger" werden als Leerzeichen geschrieben (statt -successor->)

Sonderformen von RGG-Regeln:

Aktualisierungsregeln (Regelpfeil ::> ): es werden nur Parameter verändert

Instanzierungsregeln: einzelne Zeichen werden in Substrukturen aufgelöst, ohne Einfluss auf den nächsten Entwicklungsschritt

Page 48: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Realisierung in einer Programmiersprache:

Sprache XL (eXtended L-system language)

• RGG-Regeln in Blöcken organisiert Kontrolle der Reihenfolge der Regelanwendungen

• Turtle-Kommandos als Knoten erlaubt

• Knoten sind Java-Objekte

• Sprache Java als Rahmen für die gesamte RGG Benutzer kann Konstanten, Variablen, Klassen... definieren

Page 49: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

• globale Sensitivität, graph queries

Beispiel: Wachstum nur, wenn genügender Abstand zu anderen F-Objekten

module A(int s);Axiom ==> F(100) [ RU(-30) A(70) ] RU(30) A(100);a:A(s) ==> if ( forall(distance(a, (* F *)) > 60) ) ( RH(180) F(s) [ RU(-30) A(70) ] RU(30) A(100) )

ohne die Bedingung mit der Bedingung

Page 50: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

XL wird "verstanden" von der interaktiven 3D-Plattform GroIMP (Growth-grammar related Interactive Modelling Platform)

• GroIMP stellt Objekte für die 3D-Visualisierung bereit. Diese können in XL verwendet werden.

• GroIMP ist ein open source-Projekt; siehe

http://www.grogra.de.

Page 51: Regelbasierte Programmierung mit XL Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

Beispiel eines mit GroIMP realisierten Pflanzenmodells (Gerste):