Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Struktur-Funktions-Modelle von Pflanzen - Sommersemester 2011 - Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.

Ähnliche Präsentationen


Präsentation zum Thema: "Struktur-Funktions-Modelle von Pflanzen - Sommersemester 2011 - Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik."—  Präsentation transkript:

1 Struktur-Funktions-Modelle von Pflanzen - Sommersemester 2011 - Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik 8. Vorlesung: 23. 6. 2011

2 zuletzt: Ersetzungsregeln in relationalen Wachstumsgrammatiken zwei Typen von Ersetzungsregeln: L-System- und SPO-Regeln Aktualisierungsregeln Die Sprache XL: Überblick über wichtige Eigenschaften

3 als nächstes: Darstellung von Graphen in XL Kantentypen (Relationen) transitive Hülle Graphansicht in GroIMP, Graph-Layouts Queries im Graphen Beispiel: ein Fichtenmodell

4 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 (Leerstelle) Verzweigungskante: -branch->, +> oder [ Verfeinerungskante: />

5 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)

6 selbstdefinierte Kantentypen const int xxx = EDGE_0; // oder EDGE_1,..., EDGE_14... Verwendung im Graphen: -xxx->, <-xxx-, -xxx-

7 Notation von Graphen in XL Beispiel: wird im Programmcode dargestellt als (die Darstellung ist nicht eindeutig!) ( >: Nachfolgerkante, +: Verzweigungskante)

8 wie lässt sich der folgende Graph im Code textuell beschreiben? X Bud Leaf + > 01

9 abgeleitete Relationen Relation zwischen Knoten, die durch mehrere Kanten desselben Typs (hintereinander) verbunden sind: transitive Hülle der ursprünglichen Relation (Kante)

10 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)

11 Nachfolgerkante Verzweigungskante Relation ancestor minDescendants

12 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 3D- Ansicht 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).

13 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): GeneralPurpose Tree Sugiyama Square Circle Random SimpleEdgeBased Fruchterman Verfolgen Sie die Veränderung des Graphen, wenn Sie die Regeln anwenden (redraw anklicken)!

14 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

15 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

16 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 transitive Hüllenbildung Aggregationsoperator query

17 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 transitive Hüllenbildung Aggregationsoperator Ergebnis kann übergeben werden an imperative Berechnung query

18 Query in einem Pflanzen- / Tier-Modell: p:Plant, (* a:Animal, (distance(a,p) < p[radius]) *)

19 Query in einem Pflanzen- / Tier-Modell: p:Plant, (* a:Animal, (distance(a,p) < p[radius]) *) sucht alle Tiere innerhalb des Radius von p

20 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

21 Ein Fichtenmodell in XL /* Fichtenmodell sm09_fichte.rgg, W.K. 11. 6. 2009 */ module T; /* terminale Knospe */ module M1; /* Seitenzweigknospe 1. Ordn., mediale Position */ module S1; /* Seitenzweigknospe 1. Ordn., subapikale Pos. */ module M2; /* Seitenzweigknospe 2. Ordn., mediale Pos. */ module S2; module M3; module S3; module GU(float incd, int age) extends F0; /* growth unit */ module BA(int age, super.angle) extends RL(angle); module GA(int age, super.angle) extends RL(angle); module HA(int age, super.angle) extends RL(angle); const int ang = 45; const int x3 = 50; const int[] a = { 0, 15, 25, 32, 37, 40 }; const int[] gg = { 0, 0, 4 }; const int[] hh = { 0, 0, 2, 4, 8 }; int n, k; const float[] prob_n = {0.1, 0.4, 0.3, 0.2}; const int[] n_subap = {5, 6, 7, 8};

22 protected void init() [ Axiom ==> P(2) D(1) L(100) T; ] public void grow() [ x:T ==> Nl(80*TurtleState.length(x)) GU(2.2, 0) RH(random(0, 360)) { k = 0; } for ((1:3)) /* 3 mediale Seitenäste 1. Ordnung */ ( [ MRel(random(0.2, 0.85)) RH(k*120+normal(0, 5.5)) { k++; } RL(x3+normal(0, 2.2)) BA(0, 0) LMul(0.4) M1 ] ) RH(random(0, 360)) { n = n_subap[distribution(prob_n)]; k = 0; } for ((1:n)) /* n subapikale Seitenäste 1. Ordnung */ ( [ MRel(random(0.85, 1)) RH(k*360/n+normal(0, 3.1)) { k++; } RL(x3+normal(0, 2.2)) BA(0, 0) LMul(0.65) S1 ] ) T; x:S1 ==> Nl(80*TurtleState.length(x)) GU(1.3, 0) [ MRel(random(0.85, 1)) RH(15) RU(ang+normal(0, 2.2)) AdjustLU LMul(0.7) S2 ] [ MRel(random(0.85, 1)) RH(-15) RU(-ang+normal(0, 2.2)) AdjustLU LMul(0.7) S2 ] GA(0, 0) S1; x:M1 ==> Nl(80*TurtleState.length(x)) GU(0.8, 0) [ MRel(random(0.85, 1)) RH(15) RU(ang+normal(0, 2.2)) AdjustLU LMul(0.7) M2 ] [ MRel(random(0.85, 1)) RH(-15) RU(-ang+normal(0, 2.2)) AdjustLU LMul(0.7) M2 ] HA(0, 0) M1;

23 x:S2 ==> Nl(80*TurtleState.length(x)) GU(1.3, 0) [ MRel(random(0.85, 1)) RH(10) RU(ang) AdjustLU LMul(0.7) S3 ] [ MRel(random(0.85, 1)) RH(-10) RU(-ang) AdjustLU LMul(0.7) S3 ] S2; x:M2 ==> Nl(80*TurtleState.length(x)) GU(0.8, 0) [ MRel(random(0.85, 1)) RH(10) RU(ang) AdjustLU LMul(0.7) M3 ] [ MRel(random(0.85, 1)) RH(-10) RU(-ang) AdjustLU LMul(0.7) M3 ] M2; x:S3 ==> Nl(80*TurtleState.length(x)) GU(1.3, 0); x:M3 ==> Nl(80*TurtleState.length(x)) GU(0.8, 0); GU(incd, t) ==> DlAdd(incd*(t+1)) GU(incd, t+1); DlAdd(arg) ==> ; BA(age, angle) ==> BA(age+1, a[age<5 ? age+1 : 5]); GA(age, angle) ==> GA(age+1, gg[age<2 ? age+1 : 2]); HA(age, angle) ==> HA(age+1, hh[age<4 ? age+1 : 4]); ] darin vorkommende neue Knotentypen und Befehle: siehe folgende Seiten

24 Funktion TurtleState.length(x) (für einen Knoten x ): - liefert die Schrittweite der Turtle am Knoten x Turtle-Kommando (Knoten) AdjustLU : - dreht die Turtle so um die H-Achse, dass der U-Vektor möglichst nach oben zeigt Turtle-Kommando (Knoten) N : - steuert Blattmasse (analog zu L und D ) Zufallszahlenfunktionen: - normal(, ) : liefert normalverteilte Zufallszahlen mit Mittelwert und Standardabweichung - distribution(v) mit Vektor v : liefert ganzzahlige Zufallszahlen mit Wahrscheinlichkeit v [0] für 0, v [1] für 1,...

25 dreistelliger Operator für Fallunterscheidungen: Bedingung ? Ausdruck1 : Ausdruck2 - liefert den Wert von Ausdruck1, falls die Bedingung erfüllt ist, sonst den Wert von Ausdruck2. x = Bedingung ? Ausdruck1 : Ausdruck2 ist gleichwertig zu if ( Bedingung ) x = Ausdruck1; else x = Ausdruck2; (diesen Operator gibt es auch in C, C++ und Java.)

26 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 ppt "Struktur-Funktions-Modelle von Pflanzen - Sommersemester 2011 - Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik."

Ähnliche Präsentationen


Google-Anzeigen