Struktur-Funktions-Modelle von Pflanzen - Sommersemester 2017 - Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik 10. Vorlesung: 29. 6. 2017
zuletzt: ein weiterer Regeltyp: Aktualisierungsregeln Notation von Graphen in XL der aktuelle Graph in GroIMP abgeleitete Relationen (transitive Hülle)
als nächstes: Die Sprache XL: Übersicht Queries im Graphen Die Software GroIMP: Übersicht ein erstes Modell für Beschattung
Die Sprache XL XL „eXtended L-system language“ Einordnung in die Programmierparadigmen: imperativ objektorientiert regelbasiert Java XL
Sprachspezifikation: Kniemeyer (2008) 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): [ ... ]
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)
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);
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, später 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“ statt Mengen)
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“)
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 Ergebnis kann übergeben werden an imperative Berechnung transitive Hüllenbildung Aggregationsoperator
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
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!
GroIMP (Growth-grammar related Interactive Modelling Platform)
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
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
Ergebnisse aus Architektur-Seminar mit XL: Liang 2007
Jarchow 2007
virtuelle Landschaft (mit Buchen-Fichten-Mischbestand)
weitere Beispiele für Struktur-Funktions-Modelle von Pflanzen, mit GroIMP realisiert:
GroIMP: neuere Erweiterungen „Supershape“ (Klasse von math. definierten Oberflächen) als geometrische Primitivobjekte
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:
GroIMP: neuere Erweiterungen verbesserte OpenGL-3D-Ansicht zur Visualisierung (Hartmann, Hemmerling 2010)
GroIMP: neuere Erweiterungen integriertes Werkzeug für die Erzeugung von „Billboard-Objekten“ zur schnellen Vegetations- darstellung (Hemmerling 2010)
GroIMP: neuere Erweiterungen integrierter virtueller Laserscanner (realisiert mit Ecole Centrale Paris, Praktikumsarbeit eines Studenten) (Etard 2011)
Modellierung von Licht / Beschattung erster Modellansatz (stark vereinfachend): Beschattung eines Objekts liegt dann vor, wenn sich in einem gedachten Kegel mit Spitze im Objekt, geöffnet nach oben (z-Richtung), noch andere Objekte befinden. Beispiel: sm09_b42.rgg Lichtkonkurrenz dreier 2-dimensionaler Modellpflanzen
module Segment(int t, int ord) extends F0; module TBud(int t) extends F(1, 1, 1); module LBud extends F(0.5, 0.5, 1); Vector3d z = new Vector3d(0, 0, 1); protected void init() [ Axiom ==> P(2) D(5) V(-0.15) [ TBud(-4) ] RU(90) M(600) RU(-90) [ TBud(0) ] RU(-90) M(1200) RU(90) [ TBud(-8) ]; ] public void run() TBud(t), (t < 0) ==> TBud(t+1); x:TBud(t), (t >= 0 && empty( (* s:Segment, (s in cone(x, z, 45)) *) ) ) ==> L(random(80, 120)) Segment(0, 0) [ MRel(random(0.5, 0.9)) RU(60) LBud ] [ MRel(random(0.5, 0.9)) RU(-60) LBud ] TBud(t+1); y:LBud, (empty( (* s:Segment, (s in cone(y, z, 45)) *) ) ) ==> L(random(60, 90) Segment(0, 1) RV0 LBud; Segment(t, o), (t < 8) ==> Segment(t+1, o); Segment(t, o), (t >= 8 && o == 1) ==>> ; /* Entfernen des ganzen Astes */