Teil 6: Kontextsensitive Regeln, Interpretationsregeln, Graphen

Werbung
Struktur-Funktions-Modelle von Pflanzen
- Sommersemester 2014 -
Winfried Kurth
Universität Göttingen, Lehrstuhl Computergrafik und
Ökologische Informatik
6. Vorlesung: 19. 6. 2014
zuletzt:
• L-System-Beispiele
• Einbau von Texturen in Pflanzenmodelle
• Anlegen eines Projekts in GroIMP
• stochastische L-Systeme
• (Aufgabe:) Gänseblümchen-, Farnmodell
als nächstes:
• kontextsensitive L-Systeme
• ein neuer Regeltyp: Interpretationsregeln
• der Graph als grundlegende Datenstruktur: Definition
• Eigenschaften von Graphen
• Graph-Ersetzungsregeln
Kontextsensitive L-Systeme
Abfrage eines Kontexts, der vorhanden sein muss, damit eine
Regel anwendbar ist
in XL: Angabe des Kontexts in (* .... *)
Kontextsensitive L-Systeme
Beispiel für Verwendung von linkem Kontext:
weiteres Beispiel:
sm09_b14.rgg
linker Kontext
Kontextsensitive L-Systeme
Beispiel für Verwendung von rechtem Kontext:
weiteres Beispiel:
sm09_b15.rgg
rechter Kontext
rechter Kontext; Einbau in ein Modell zur signalgesteuerten
Auslösung des Austriebs von Seitentrieben
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);
// 2 = grün
A(t), (t == 5) ==> B(10, 4);
// 4 = rot
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) ]; // 3 = blau
Einschub:
Interpretationsregeln
Einbau einer weiteren Regelanwendung unmittelbar
vor der grafischen Interpretation (ohne Wirkung auf
die nächste Generation)
InterpretationsregelAnwendung
Turtle-Interpretation
gewöhnliche geometrische Interpretation (ohne Interpretationsregeln):
mit Verwendung von Interpretationsregeln:
weiteres Beispiel:
module
module
module
module
module
MainBud(int x) extends Sphere(3) {{setShader(GREEN);}};
LBud extends Sphere(2) {{setShader(RED);}};
LMeris;
AMeris;
Flower;
const float d = 30;
const float crit_dist = 21;
protected void init()
[ Axiom ==> MainBud(10); ]
public void run()
{ [
MainBud(x) ==> F(20, 2, 15) if (x > 0)
( RH(180) [ LMeris ] MainBud(x-1) )
else
( AMeris );
LMeris ==> RU(random(50, 70)) F(random(15, 18), 2, 14) LBud;
LBud ==> RL(90) [ Flower ];
AMeris ==> Scale(1.5) RL(90) Flower;
/* Flower: hier nur ein Symbol */
]
applyInterpretation();
/* Aufruf der Interpretationsregelausfuehrung
(im imperativen Teil { ... } !)
*/
}
protected void interpret()
/* Block mit Interpretationsregeln */
[
Flower ==> RH(30) for ((1:5))
( RH(72) [ RL(80) F(8, 1, 9) ] );
]
weiteres Beispiel:
public void run()
{
[
Axiom ==> A;
A ==> Scale(0.3333) for (int i:(-1:1))
for (int j:(-1:1))
if ((i+1)*(j+1) != 1)
( [ Translate(i, j, 0) A ] );
]
applyInterpretation();
}
public void interpret()
[
A ==> Box;
]
erzeugt den sogenannten „Menger-Schwamm“ (ein Fraktal)
public void run()
{ [
Axiom ==> A;
A ==> Scale(0.3333) for (int i:(-1:1))
for (int j:(-1:1))
if ((i+1)*(j+1) != 1)
( [ Translate(i, j, 0) A ] );
]
applyInterpretation();
}
(a)
(b)
public void interpret()
[
A ==> Box;
]
A ==> Sphere(0.5);
(c)
A ==> Box(0.1, 0.5, 0.1)
Translate(0.1, 0.25, 0) Sphere(0.2);
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);
]
Der Schritt zu Graph-Grammatiken
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
Ein Graph: eine Art, Daten zu organisieren
Def.: eine Menge von Knoten, (teilweise)
verbunden durch (gerichtete) Kanten
(Relationen).
T
T
I
I
T
I
Kantentypen (Relationen):
Knoten
T
I
(T = Trieb, I = Internodium)
Nachfolgerbeziehung
Verfeinerungsbeziehung
Eine Zeichenkette (string):
ein sehr einfacher Graph
Eine Zeichenkette kann man als 1dimensionalen Graphen mit nur einem
Kantentyp auffassen
 Nachfolger-Kanten (successor relation)

A
B
A
C
A
A
B
A
C
Finden Sie so eine Struktur irgendwo im
realen Leben wieder?
R
S
S
S
B
B
B
B
B
B
B
S
S
S
B
B
B
B
B
B
B
B
B
S
B
B
S
S
S
S
S
B
B
B
B
B
B
B
B
B
S
vielleicht jetzt?
Bu
d
Bu
d
Shoot
Bu
d
Bu
d
Bu
d
Bu
d
Shoot
Shoot
Bu
d
Shoot
Bu
d
Bu
d
Bud
Bu
d
Bud
Shoot
Bud
Bu
d
Bu
d
Bud
Shoot
Shoot
Bu
d
Shoot
Shoot
Bu
d
Bu
d
Bu
d
Shoot
Bu
d
Bu
d
Shoot
Bu
d
Bu
d
Bu
d
Shoot
Root
Bu
d
Shoot
Bu
d
es handelt sich um einen Baum.
Bäume sind spezielle Graphen.
4

3 Knotentypen
 Wurzelkompartiment
 Jahrestriebe
 Knospen
3
2

2 Kantentypen
 Nachfolgerrelation (selbe Achse)
 Verzweigungsrelation (neue Achse)
1
zugrundeliegendes Teilgebiet der Mathematik: Topologie
zwei isomorphe Graphen:
dichotom
Fischgräten
nun werden die Graphen zeitlich veränderlich gemacht!
Graph-Grammatik (Beispiel)
Regel:
Graph-Grammatik (Beispiel)
Regel:
Anwendung:
hier nicht anwendbar! (falscher Kantentyp)
Eine relationale Wachstumsgrammatik (RGG)*
(spezieller Typ von Graph-Grammatik) enthält:



ein Alphabet
– die Definition aller erlaubten
• Knotentypen
• Kantentypen (Typen von Relationen)
das Axiom
– ein initialer Graph, der aus Elementen des
Alphabets zusammengesetzt ist
eine Menge von Graphersetzungsregeln.
* relational growth grammar
Eine relationale Wachstumsgrammatik enthält:



ein Alphabet
– die Definition aller erlaubten
Root
Shoot
• Knotentypen
• Typen von Relationen Nachfolger
Bu
d
Verzweigung
Bu
Root
Shoot
das Axiom
d
– ein initialer Graph, der aus den Elementen des
Alphabets zusammengesetzt ist
eine Menge von Graphersetzungsregeln
Was sind nun diese
Graphersetzungsregeln
(RGG-Regeln) ?
und wie wendet man sie an?
Graphersetzungsregeln sind
Regeln für die Transformation eines
Graphen (Teilgraphen) in einen anderen
Graphen.
eine Regel besteht im wesentlichen aus:
linker Regelseite ==> rechter Regelseite
Wie eine RGG-Regel
angewandt wird

jede linke Regelseite beschreibt einen
Teilgraphen (ein Muster aus Knoten und
Kanten, das im Gesamtgraphen gesucht wird),
welcher ersetzt wird bei der Regelanwendung.

jede rechte Regelseite definiert einen neuen
Teilgraphen, der als Ersatz für den entfernten
Teilgraphen eingefügt wird.
einfaches Beispiel mit Zeichenkette

Jedes Vorkommen des in der linken Regelseite
definierten Teilgraphen wird ersetzt!
A
B
C
A
C
A
D
B
C
D
wird ersetzt durch
C
2 Regelanwendungen im selben Zeitschritt.
D
eine vollständige RGG-Regel
kann 5 Teile enthalten:
(* Kontext *), Linke Regelseite, ( Bedingung )
==>
Rechte Regelseite { imperativer XL-Code }
Kontext-Beispiel
(* Kontext *), Linke Regelseite, (Bedingung)
==>
Rechte Regelseite { imperativer XL-Code }
Beispiel:
A
B
C
A
C
A
D
B
C
A
C
(* B
*) wird ersetzt durch
D
Bedingungs-Beispiel
(* Kontext *), Linke Regelseite, ( Bedingung )
==>
Rechte Regelseite { imperativer XL-Code }
Beispiel:
A
B
C
A
a:A
A
C
( a[length] > 10 ) wird ersetzt durch
B
D
C
A
C
B
C
A
C
D
2 mögliche Ergebnisse, abhängig vom
aktuellen Längenparameter des A-Knotens
RELATIONALE WACHSTUMSGRAMMATIKEN
(RGG: Relational Growth Grammars, parallele Graph-Gramm.)
Zusammenfassung: Aufbau einer Regel einer RGG
imperativer
Code
Hausaufgabe:
1. Bearbeiten Sie im ILIAS-Lernmodul „Einführung in
GroIMP“ (verfügbar über StudIP) die Lektionen 13 - 16
und 20 - 22.
2. Lesen Sie Chapter 1, Section 1.8 im Buch „The
Algorithmic Beauty of Plants“ von P. Prusinkiewicz und
A. Lindenmayer (= S. 30-35).
(Beachten Sie die abweichende Notation für
kontextsensitive Regeln.)
Herunterladen