Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


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

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

2 zuletzt: Vorbereitung der morphologischen Messungen ein weiterer Regeltyp: Aktualisierungsregeln Notation von Graphen in XL der aktuelle Graph in GroIMP

3 als nächstes: abgeleitete Relationen (z.B. transitive Hüllen) Die Sprache XL: Übersicht Queries im Graphen Die Software GroIMP: Übersicht ein einfaches Fichtenmodell

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

5 transitive Hülle: (-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.

6 (diese Relationen erstrecken sich nur bis zum ersten Knoten vom Typ B)

7

8 unterhalb des Blattes

9 Nachfolgerkante Verzweigungskante ancestor: nächster Vorgängerknoten, der einen gegebenen Knotentyp hat descendants: alle Nachfolger, die einen geg. Knotentyp haben minDescendants: nächste Nachfolger, die einen geg. Knotentyp haben (Knoten anderer Typen werden übersprungen)

10

11 imperativobjektorientiertregelbasiert Java XL Die Sprache XL „eXtended L-system language“ Einordnung in die Programmierparadigmen:

12 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 imperative Blöcke, ähnlich wie in Java: {... } regelorientierte Blöcke (RGG-Teil): [... ]

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

14 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

15 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 Knoten des Graphen Kanten (Typ „Nachfolger“)

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

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

18 Zugriff auf Knotenattribute: Beispiel sm09_b26.rgg module Knospe() extends Sphere(0.1) {{ setShader(RED); }}; module Internodium() extends F(1) {{ setShader(GREEN); setScale(1); }}; protected void init() [ Axiom ==> Internodium() Knospe(); ] public void run1() [ i:Internodium ::> i[length] = i[length] + 0.1; ] public void run2() [ i:Internodium ::> i.length = i.length + 0.1; ] public void run3() [ i:Internodium ::> i[scale] += 0.1; ] public void run4() [ i:Internodium ::> i.setScale(1); ]

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

20 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

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

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

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

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 (kann modifiziert werden: Sequenzieller Modus einstellbar, später mehr)

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 spezieller Zuweisungsoperator := neben dem normalen = Quasiparallele Zuweisung an die Variablen x und y: x := f(x, y); y := g(x, y);

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)

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

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

29 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

30 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“)

31

32 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

33 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

34 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

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

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

37 Queries (Beispiele) Testen Sie die Beispiele sm09_b28.rgg, sm09_b29.rgg.

38 Die Software GroIMP http://www.grogra.de dort auch Link auf die Download-Seite http://sourceforge.net/projects/groimp/ und Beispiele-Galerie. Siehe auch Lerneinheiten zu GroIMP (Autor: K. Petersen, M.Sc. Forst., Sommersem. 2009). GroIMP ist ein Open-Source-Projekt!

39 GroIMP (Growth-grammar related Interactive Modelling Platform)

40 GroIMP ist eine Kombination von: - XL-Compiler und -Interpreter - Entwicklungsumgebung für XL - 3D-Modeller (interaktiv) - 3D-Renderer (mehrere Varianten) - 2D-Graphen-Visualisierer - Editor für 3D-Objekte und Attribute - Texturerzeugungswerkzeug - Display für dtd-Dateien - Lichtsimulationswerkzeug

41 Beispiel eines mit GroIMP realisierten Pflanzenmodells (Gerste):

42 Anwendungsbeispiel: Modellierung von Parklandschaften (Rogge & Moschner 2007, für Stiftung Branitzer Park, Cottbus) mit GroIMP generierte Erle in VRML-Welt

43 Ergebnisse aus Architektur-Seminar mit XL: Liang 2007

44

45 Jarchow 2007

46

47 virtuelle Landschaft (mit Buchen-Fichten-Mischbestand)

48

49 weitere Beispiele für Struktur- Funktions-Modelle von Pflanzen, mit GroIMP realisiert:

50 GroIMP: neuere Erweiterungen „Supershape“ (Klasse von math. definierten Oberflächen) als geometrische Primitivobjekte

51 GroIMP: neuere Erweiterungen Raten-Zuweisungsoperator: Möglichkeit, effiziente und numerisch stabile Lösungsverfahren für gewöhnliche Differentialgleichungen auf einfache Weise im Modellcode aufzurufen (Hemmerling 2012) Example:

52 GroIMP: neuere Erweiterungen verbesserte OpenGL-3D-Ansicht zur Visualisierung (Hartmann, Hemmerling 2010)

53 GroIMP: neuere Erweiterungen integriertes Werkzeug für die Erzeugung von „Billboard-Objekten“ zur schnellen Vegetations- darstellung (Hemmerling 2010)

54 GroIMP: neuere Erweiterungen integrierter virtueller Laserscanner (realisiert mit Ecole Centrale Paris, Praktikumsarbeit eines Studenten) (Etard 2011)

55 Ein Fichtenmodell in XL /* Fichtenmodell sm09_fichte.rgg */ 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};

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

57 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

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

59 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.)

60 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 2015 - Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik."

Ähnliche Präsentationen


Google-Anzeigen