Teil 6: Überblick zu XL, Kantentypen, Graphansicht

Werbung
Struktur-Funktions-Modelle von Pflanzen
- Sommersemester 2009 -
Winfried Kurth
Universität Göttingen, Lehrstuhl Computergrafik und
Ökologische Informatik
8. und 9. Vorlesung: 11./18. 6. 2009
zuletzt:
• Interpretationsregeln
• Graphen als mathematische Grundstruktur
• ein Exkurs: topologische Indices
• Graph-Ersetzungsregeln
• zwei Regeltypen: L-System- und SPO-Regeln
als nächstes:
• Die Sprache XL: Überblick zu wichtigen Eigenschaften
• Kantentypen (Relationen)
• Graphansicht in GroIMP, Graphlayouts
• sequenzieller und paralleler Ableitungsmodus
• Aktualisierungsregeln
• Zugriffsmöglichkeiten auf Attribute
• Graph-Queries
• Dickenwachstum, pipe model
Die Sprache XL
„eXtended L-system language“
Einordnung in die Programmierparadigmen:
imperativ
objektorientiert
Java
XL
regelbasiert
Die Sprache XL
Sprachspezifikation: Kniemeyer (2008)
Dissertation:
http://nbn-resolving.de/urn/resolver.pl?urn=urn:nbn:de:kobv:co1-opus-5937
 Erweiterung von Java
 erlaubt zugleich Spezifikation von L-Systemen und RGG
(Graph-Grammatiken) in intuitiv verständlicher
Regelschreibweise
prozedurale Blöcke, ähnlich wie in Java: { ... }
regelorientierte Blöcke (RGG-Teil): [ ... ]
Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte
Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte
Beispiel: XL-Programm für die Koch‘sche Kurve
public void derivation()
[
Axiom ==> RU(90) F(10);
F(x) ==> F(x/3) RU(-60) F(x/3) RU(120) F(x/3) RU(-60) F(x/3);
]
Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte
Beispiel: XL-Programm für die Koch‘sche Kurve
public void derivation()
[
Axiom ==> RU(90) F(10);
F(x) ==> F(x/3) RU(-60) F(x/3) RU(120) F(x/3) RU(-60) F(x/3);
]
Knoten des
Graphen
Kanten (Typ „Nachfolger“)
Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte
Spezielle Knoten:
Geometrieobjekte
Box, Sphere, Cylinder, Cone, Frustum, Parallelogram...
Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte
Spezielle Knoten:
Geometrieobjekte
Box, Sphere, Cylinder, Cone, Frustum, Parallelogram...
Zugriff auf Attribute über die Parameterliste:
Box(x, y, z)
(Länge, Breite, Höhe)
oder mit speziellen Funktionen:
Box(...).(setColor(0x007700)) (Farbe)
Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte
Spezielle Knoten:
Geometrieobjekte
Box, Sphere, Cylinder, Cone, Frustum, Parallelogram...
Transformationsknoten
Translate(x, y, z), Scale(cx, cy, cz), Scale(c),
Rotate(a, b, c), RU(a), RL(a), RH(a), RV(c), RG,
...
Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte
Spezielle Knoten:
Geometrieobjekte
Box, Sphere, Cylinder, Cone, Frustum, Parallelogram...
Transformationsknoten
Translate(x, y, z), Scale(cx, cy, cz), Scale(c),
Rotate(a, b, c), RU(a), RL(a), RH(a), RV(c), RG,
...
Lichtquellen
PointLight, DirectionalLight, SpotLight, AmbientLight
Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte
● Regeln in Blöcken [...] organisierbar, Steuerung der Anwendung
durch Kontrollstrukturen
Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte
● Regeln in Blöcken [...] organisierbar, Steuerung der Anwendung
durch Kontrollstrukturen
Beispiel: Regeln für den stochastischen Baum
Axiom ==> L(100) D(5) A;
A ==> F0 LMul(0.7) DMul(0.7)
if (probability(0.5))
( [ RU(50) A ] [ RU(-10) A ] )
else
( [ RU(-50) A ] [ RU(10) A ] );
Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte
● Regeln in Blöcken [...] organisierbar, Steuerung der Anwendung
durch Kontrollstrukturen
● parallele Regelanwendung
Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte
● Regeln in Blöcken [...] organisierbar, Steuerung der Anwendung
durch Kontrollstrukturen
● parallele Regelanwendung
(kann modifiziert werden: Sequenzieller Modus einstellbar, gleich mehr)
Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte
● Regeln in Blöcken [...] organisierbar, Steuerung der Anwendung
durch Kontrollstrukturen
● parallele Regelanwendung
● parallele Ausführung von Zuweisungen möglich
spezieller Zuweisungsoperator := neben dem normalen =
Quasiparallele Zuweisung an die Variablen x und y:
x := f(x, y);
y := g(x, y);
Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte
● Regeln in Blöcken [...] organisierbar, Steuerung der Anwendung
durch Kontrollstrukturen
● parallele Regelanwendung
● parallele Ausführung von Zuweisungen möglich
● Operatorüberladung (z.B. „+“ für Zahlen wie für Vektoren)
Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte
● Regeln in Blöcken [...] organisierbar, Steuerung der Anwendung
durch Kontrollstrukturen
● parallele Regelanwendung
● parallele Ausführung von Zuweisungen möglich
● Operatorüberladung (z.B. „+“ für Zahlen wie für Vektoren)
● mengenwertige Ausdrücke (genauer: „Producer“)
Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte
● Regeln in Blöcken [...] organisierbar, Steuerung der Anwendung
durch Kontrollstrukturen
● parallele Regelanwendung
● parallele Ausführung von Zuweisungen möglich
● Operatorüberladung (z.B. „+“ für Zahlen wie für Vektoren)
● mengenwertige Ausdrücke (genauer: Producer statt Mengen)
● Graph-Abfragen (queries) zur Analyse der aktuellen Struktur
Beispiel für Graph-query:
Binärer Baum, Wachstum soll nur erfolgen, wenn genügender
Abstand zu anderen F-Objekten
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 if-Bedingung
mit der if-Bedingung
Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte
● Regeln in Blöcken [...] organisierbar, Steuerung der Anwendung
durch Kontrollstrukturen
● parallele Regelanwendung
● parallele Ausführung von Zuweisungen möglich
● Operatorüberladung (z.B. „+“ für Zahlen wie für Vektoren)
● mengenwertige Ausdrücke (genauer: Producer statt Mengen)
● Graph-Abfragen (queries) zur Analyse der aktuellen Struktur
● aggregierende Operatoren (z.B. „sum“, „mean“, „empty“, „forall“,
„selectWhereMin“)
Darstellung von Graphen in XL
● Knotentypen müssen mit „module“ deklariert werden
● Knoten können alle Java-Objekte sein.
Bei eigenen module-Deklarationen können auch Methoden
(Funktionen) und zusätzliche Variablen mitdeklariert werden,
wie in Java
● Notation für Knoten in einem Graphen:
Knotentyp, optional davor: bezeichner:
Beispiele: A, Meristem(t), b:Bud
● Notation für Kanten in einem Graphen:
-Kantenbezeichner->, <-Kantenbezeichner● Spezielle Kantentypen:
Nachfolgerkante:
-successor->, > oder
Verzweigungskante: -branch->, +> oder [
Verfeinerungskante: />
(Leerstelle)
Notationen für spezielle Kantentypen
>
Nachfolgerkante vorwärts
<
Nachfolgerkante rückwärts
---
Nachfolgerkante vorwärts oder rückwärts
+>
Verzweigungskante vorwärts
<+
Verzweigungskante rückwärts
-+-
Verzweigungskante vorwärts oder rückwärts
/>
Verfeinerungskante vorwärts
</
Verfeinerungskante rückwärts
-->
beliebige Kante vorwärts
<--
beliebige Kante rückwärts
--
beliebige Kante vorwärts oder rückwärts
(vgl. Kniemeyer 2008, S. 150 und 403)
selbstdefinierte Kantentypen
const int xxx = EDGE_0;
// oder EDGE_1, ..., EDGE_14
...
Verwendung im Graphen: -xxx->, <-xxx-, -xxx-
Notation von Graphen in XL
Beispiel:
wird im Programmcode dargestellt als
(die Darstellung ist nicht eindeutig!)
( >: Nachfolgerkante, +: Verzweigungskante)
wie lässt sich der folgende Graph im Code textuell beschreiben?
>
Bud
0
X
+
Leaf
1
abgeleitete Relationen
Relation zwischen Knoten, die durch mehrere Kanten
desselben Typs (hintereinander) verbunden sind:
„transitive Hülle“ der ursprünglichen Relation (Kante)
Bezeichnungsweise für die transitive Hülle in XL:
(-kantentyp->)+
reflexiv-transitive Hülle (auch „Knoten steht in Relation zu
sich selbst“ zugelassen):
(-kantentyp->)*
z.B. für die Nachfolgerrelation: (>)*
gemeinsame transitive Hülle der speziellen Kantentypen
„Nachfolger“ und „Verzweigung“, in umgekehrter Richtung:
-ancestor->
Interpretation: diese Relation besteht zu allen „Vorgängerknoten“
in einem Baum entlang des Pfades zur Wurzel.
Nächste Nachfolger eines bestimmten Knotentyps:
-minDescendants-> (Knoten anderen Typs werden übersprungen)
Nachfolgerkante
Verzweigungskante
minDescendants
Relation
„ancestor“
Der aktuelle Graph
GroIMP führt immer einen Graphen mit, der die gesamte
aktuelle Strukturinformation beinhaltet. Dieser wird durch
Anwendung der Regeln umgeformt.
Achtung: Nicht alle Knoten des Graphen werden in der 3DAnsicht durch sichtbare Objekte dargestellt!
- F0, F(x), Box, Sphere: ja
- RU(30), A, B: normalerweise nicht (wenn nicht mit „extends“
aus sichtbaren Objekten abgeleitet)
Der Graph kann in der 2D-Graphansicht komplett dargestellt
werden (in GroIMP: Panels - 2D - Graph).
Laden Sie eine Beispiel-rgg-Datei in GroIMP und führen
Sie einige Schritte aus (verwenden Sie keine zu komplexe
Struktur).
Öffnen Sie die 2D-Graphansicht, verankern Sie mit der
Maus das Fenster in der GroIMP-Oberfläche und testen
Sie verschiedene Layouts (Layout - Edit):
Tree
Sugiyama
Square
Circle
Random
SimpleEdgeBased
Fruchterman
Verfolgen Sie die Veränderung des
Graphen, wenn Sie die Regeln
anwenden (redraw anklicken)!
was ist von der in XL erzeugten Graph-Struktur sichtbar
(in der 3D-Ansicht) ?
alle Geometrieknoten, die von der Wurzel (Zeichen: ^) des
Graphen über genau einen Pfad, der nur aus "successor"und "branch"-Kanten besteht, erreichbar sind.
Erzwingen, dass ein Objekt auf jeden Fall sichtbar ist:
==>> ^ Objekt
Ableitungsmodi in XL
standardmäßig voreingestellt: parallele Regelanwendung (wie
bei L-Systemen)
Umschalten auf sequenzielle Anwendung (in jedem Schritt
wird dann höchstens eine Regel angewandt):
setDerivationMode(SEQUENTIAL_MODE)
Rückschaltung auf parallel:
setDerivationMode(PARALLEL_MODE)
testen Sie das Beispiel sm09_b32.rgg
ein weiterer Regeltyp:
Aktualisierungsregeln
manchmal will man gar nichts an der Graph-Struktur ändern,
sondern nur Attribute eines einzelnen Knotens verändern
(z.B. Berechnung der Photosyntheseleistung für ein Blatt).
Dazu gibt es einen eigenen Regeltyp:
A ::> { imperativer Code };
Testen Sie die Beispiele sm09_b25.rgg, sm09_b16.rgg,
sm09_b17.gsz, sm09_b18.rgg
und für den Zugriff auf Knotenattribute: sm09_b26.rgg
Anfragen (queries) in den erzeugten Graphen
Möglichkeit der Verbindung von Struktur und
Funktion
Beispiel: suche alle Blätter, die Nachfolger des Knotens c
sind, und summiere deren Fläche
query
Anfragen (queries) in den erzeugten Graphen
Möglichkeit der Verbindung von Struktur und
Funktion
Beispiel: suche alle Blätter, die Nachfolger des Knotens c
sind, und summiere deren Fläche
query
transitive Hüllenbildung
Aggregationsoperator
Anfragen (queries) in den erzeugten Graphen
Möglichkeit der Verbindung von Struktur und
Funktion
Beispiel: suche alle Blätter, die Nachfolger des Knotens c
sind, und summiere deren Fläche
query
transitive Hüllenbildung
Aggregationsoperator
Ergebnis kann
übergeben werden an
imperative
Berechnung
Query in einem Pflanzen- / Tier-Modell:
p:Plant,
(* a:Animal, (distance(a,p) < p[radius]) *)
Query in einem Pflanzen- / Tier-Modell:
p:Plant,
(* a:Animal, (distance(a,p) < p[radius]) *)
sucht alle Tiere innerhalb des Radius von p
Query-Syntax:
Umgeben wird eine Query mit (*
*)
Die Elemente werden in ihrer erwarteten Reihenfolge
angegeben, z.B.:
(* A A B *) sucht nach einen Subgraphen, welcher eine
Folge von Knoten der Typen A A B, verbunden durch
Nachfolgerkanten, enthält.
Testen Sie die Beispiele sm09_b28.rgg, sm09_b29.rgg,
sm09_b30.rgg, sm09_b31.rgg, sm09_b35.rgg,
sm09_b36.rgg
Modellierung des Dickenwachstums in Pflanzen
häufig verwendete Ansätze:
- Regression Durchmesser ~ Länge für neue Wachstumseinh.
- Zuwachs dann von Alter, Verzweigungsordnung etc.
abhängig
verwende z.B. Regel mit jährlichem festem Wachstum
Shoot(l, d) ==> Shoot(l, d+delta_d);
Interpretationsregel für Shoot: Shoot(d) ==> F(l, d);
- oder: “pipe-model“-Annahme
“pipe model“
(SHINOZAKI et al. 1964) :
Parallel geschaltete
“unit pipes“
Querschnitt
~ Blattmasse
~ Feinwurzelmasse
Folgerung :
„Leonardo-Regel“ (da Vinci, um 1500)
di
In jedem
Verzweigungsknoten gilt
d2 =  di2
d
(Invarianz der
Querschnittsfläche)
A1
A = A1 + A2
d 2 = d12 + d22
A
A2
Realisierung in einem XL-Modell:
siehe Beispiele sm09_b33.rgg, sm09_b34.rgg
dort wird zunächst das Längen- und Strukturwachstum
simuliert, dann in getrennten Schritten das Dickenwachstum,
berechnet von oben nach unten
(es ist auch eine – realistischere – Kombination möglich)
Praktisches Arbeiten mit XL:
Ein XL-Compiler wird zur Verfügung gestellt von der
Software GroIMP
http://www.grogra.de
dort auch Link auf die Download-Seite
Interaktive 3D-Plattform GroIMP (Growth-grammar related
Interactive Modelling Platform)
• GroIMP ist ein Open Source-Projekt
GroIMP ist eine Kombination von:
- Graph-Grammatiken- (XL-) Interpreter
- Entwicklungsumgebung für XL
- 3D-Modeller
- 3D-Renderer (mehrere Varianten)
- 2D-Graphen-Visualisierer
- Editor für 3D-Objekte und Attribute
- Texturerzeugungswerkzeug
- X3D- (VRML-) Viewer (in Arbeit)
- Lichtsimulationswerkzeug
Beispiel eines mit
GroIMP realisierten
Pflanzenmodells
(Gerste):
Anwendungsbeispiel: Modellierung von Parklandschaften
(Rogge & Moschner 2007, für Stiftung Branitzer Park, Cottbus)
mit GroIMP
generierte Erle
in VRML-Welt
virtuelle Landschaft (mit Buchen-Fichten-Mischbestand)
Ergebnisse aus Architektur-Seminar mit XL:
Liang 2007
Jarchow 2007
Hausaufgabe:
Analysieren Sie den XL-Code des Modells sm09_fichte.rgg.
Testen Sie das Modell mit GroIMP, und analysieren Sie den
Code noch einmal.
Notieren Sie alles, was Ihnen unklar ist.
Versuchen Sie, folgende Fragen zu beantworten:
- wie lässt sich das Dickenwachstum verstärken
- für alle Wachstumseinheiten (growth units, GU)?
- nur für den Stamm?
- wie lässt sich (durch Veränderung des Längenwachstums)
eine schlankere Kronenform erreichen?
- wie lässt sich die Zahl der Haupt-Seitenäste vermindern?
Herunterladen