Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


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

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

2 zuletzt: Ersetzungsregeln in relationalen Wachstumsgrammatiken zwei Typen von Ersetzungsregeln: L-System- und SPO-Regeln Fichtenmodell dtd-Codierung

3 als nächstes: Fichtenmodell (Lösungen der Hausaufgabe) ein weiterer Regeltyp: Aktualisierungsregeln die Programmiersprache XL: wichtige Eigenschaften Darstellung von Graphen in XL

4 Fichtenmodell in XL (vgl. letzte Vorlesung) /* Fichtenmodell sm09_fichte.rgg, W.K */ 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};

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

6 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]); ]

7 - was ist unklar? - 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?

8 imperativobjektorientiertregelbasiert Java XL Die Sprache XL eXtended L-system language Einordnung in die Programmierparadigmen:

9 Die Sprache XL Sprachspezifikation: Kniemeyer (2008) Dissertation: Erweiterung von Java erlaubt zugleich Spezifikation von L-Systemen und RGG (Graph-Grammatiken) in intuitiv verständlicher Regelschreibweise imperative Blöcke, ähnlich wie in Java: {... } regelorientierte Blöcke (RGG-Teil): [... ]

10 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_b18.rgg

11 Eigenschaften der Sprache XL: Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte

12 Beispiel: XL-Programm für die Kochsche 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

13 Beispiel: XL-Programm für die Kochsche 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 Knoten des Graphen Kanten (Typ Nachfolger)

14 Eigenschaften der Sprache XL: Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte Spezielle Knoten: Geometrieobjekte Box, Sphere, Cylinder, Cone, Frustum, Parallelogram...

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

16 Zugriff auf Knotenattribute: Beispiel sm09_b26.rgg

17 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,...

18 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

19 Eigenschaften der Sprache XL: Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte Regeln in Blöcken [...] organisierbar, Steuerung der Anwendung durch Kontrollstrukturen

20 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 ] );

21 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

22 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, später mehr)

23 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);

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

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

26 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

27 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

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

29 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: />

30 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 beliebige Kante vorwärts <-- beliebige Kante rückwärts -- beliebige Kante vorwärts oder rückwärts (vgl. Kniemeyer 2008, S. 150 und 403)

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

32 Hausaufgabe zum : Lesen Sie die Abschnitte 3.1 bis 3.13 (S ) aus der Dissertation von Ole Kniemeyer ( resolving.de/urn/resolver.pl?urn=urn:nbn:de:kobv:co1- opus-5937 )


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

Ähnliche Präsentationen


Google-Anzeigen