Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


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

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

2 letztes Mal: Verwendung von imperativem Code in XL-Programmen Schleifen und Arrays bei Verzweigungs-Konstruktionen

3 als nächstes: konditionale Regelanwendung (Beispiel) Einbau von Texturen in Pflanzenmodelle Anlegen eines Projekts in GroIMP stochastische L-Systeme kontextsensitive L-Systeme ein neuer Regeltyp: Interpretationsregeln der Übergang zu Graph-Grammatiken: Def. „Graph“

4 Konditionale L-System-Regeln in XL linke_Regelseite, ( Bedingung ) ==> rechte_Regelseite Beispiele: sm09_b11.rgg Bedingungen für Regelanwendungen sm09_b12.rgg Bedingungen für Regelanwendungen (2. Variante) sm09_b13.rgg Verknüpfung zweier Bedingungen

5 sm09_b13.rgg (Def. von Konstanten; mehrere Bedingungen in einer Regel) module Shoot(float len) extends F(len); module Bud(int order, float strength) extends Sphere(0.2) {{setShader(RED); setTransform(0,0,0.3);}}; const float APIKAL_REDUKTIONSFAKTOR = 0.96; const float MAX_ORDER_ALLOWED = 3; const float STRENGTH_LIMIT = 1.5; //---------------------------------------------------- // Startblock mit dem Startwort protected void init() [ Axiom ==> Bud(0, 5); ] // oeffentlicher Regelblock (erscheint im Menue) public void wachse() [ // zwei Bedingungen werden gestellt b:Bud(o, x), (b[order] STRENGTH_LIMIT) ==> Shoot(x) [ RU(50) Bud(o+1, 0.7*x) ] [ RU(-50) Bud(o+1, 0.7*x) ] Bud(o, APIKAL_REDUKTIONSFAKTOR*x); ]

6 Farben setzen in XL (Zusammenfassung)

7 Texturen Texturen sind 2-dimensionale Muster, die anstelle von Farben auf Oberflächen aufgetragen werden, um einen realistischeren Eindruck der Beschaffenheit von Objektoberflächen zu erhalten. Quellen für Texturen: Fotos, Scans von Objekten, Bilddatenbanken im Internet, künstlich erzeugte Muster...

8

9 Beispiel mit Baum-Foto als Textur für das Rechteck:

10 zu beachten bei Anlegen des Projekts: Editor-Datei nach der Auswahl der Bilddatei neu speichern / kompilieren - texturierte Objekte werden nun mit Textur dargestellt Speichern des gesamten Projekts: File  Save, Namen des Projekts eingeben (muss nicht mit Namen der RGG-Programmdatei übereinstimmen). Bilddatei wird mit- gespeichert. Projektdatei hat Namensendung.gsz (lesbar mit Datenkompressionsprogrammen wie z.B. WinZIP) Beispiel: sm09_b10.gsz Verwendung einer Blatt-Textur

11 Stochastische L-Systeme Verwendung von Pseudozufallszahlen Beispiel: deterministisch stochastisch Axiom ==> L(100) D(5) A; A ==> F0 LMul(0.7) DMul(0.7) [ RU(50) A ] [ RU(-10) A ]; 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 ] );

12 Beispiel: Fichtenmodell in 3D mit L-System erzeugt

13 XL-Funktionen für Pseudozufallszahlen: Man teste das Beispiel sm09_b19.rgg Stochastisches L-System

14 Erzeugung einer Zufallsverteilung in der Ebene: Axiom ==> D(0.5) for ((1:300)) ( [ Translate(random(0, 100), random(0, 100), 0) F(random(5, 30)) ] ); Ansicht von oben schräg von der Seite

15 Man teste die Beispiele sm09_b23.rgg Verbreitungsmodell (1 Art) sm09_b24.rgg Verbreitungsmodell (2 Arten) In diesen Beispielen wird die Konkurrenz noch nicht berücksichtigt. Es wird gezeigt, wie Populationsstärken in Charts während der Laufzeit der Simulation ausgeplottet werden können.

16 Kontextsensitive L-Systeme Abfrage eines Kontexts, der vorhanden sein muss, damit eine Regel anwendbar ist in XL: Angabe des Kontexts in (*.... *)

17 Kontextsensitive L-Systeme Beispiel für Verwendung von linkem Kontext: weiteres Beispiel: sm09_b14.rgg linker Kontext

18 Kontextsensitive L-Systeme Beispiel für Verwendung von rechtem Kontext: weiteres Beispiel: sm09_b15.rgg rechter Kontext

19 rechter Kontext; Einbau in ein Modell zur signalgesteuerten Auslösung des Austriebs von Seitentrieben module A(int age); module B(super.length, super.color) extends F(length, 3, color); Axiom ==> A(0); A(t), (t B(10, 2) A(t+1); // 2 = grün A(t), (t == 5) ==> B(10, 4); // 4 = rot B(s, 2) (* B(r, 4) *) ==> B(s, 4); B(s, 4) ==> B(s, 3) [ RH(random(0, 360)) RU(30) F(30, 1, 14) ]; // 3 = blau

20 Einschub:

21 Interpretationsregeln Einbau einer weiteren Regelanwendung unmittelbar vor der grafischen Interpretation (ohne Wirkung auf die nächste Generation) Interpretationsregel- Anwendung Turtle-Interpretation

22 gewöhnliche geometrische Interpretation (ohne Interpretationsregeln):

23 mit Verwendung von Interpretationsregeln:

24 weiteres Beispiel: module MainBud(int x) extends Sphere(3) {{setShader(GREEN);}}; module LBud extends Sphere(2) {{setShader(RED);}}; module LMeris; module AMeris; module Flower; const float d = 30; const float crit_dist = 21; protected void init() [ Axiom ==> MainBud(10); ] public void run() { [ MainBud(x) ==> F(20, 2, 15) if (x > 0) ( RH(180) [ LMeris ] MainBud(x-1) ) else ( AMeris ); LMeris ==> RU(random(50, 70)) F(random(15, 18), 2, 14) LBud; LBud ==> RL(90) [ Flower ]; AMeris ==> Scale(1.5) RL(90) Flower; /* Flower: hier nur ein Symbol */ ] applyInterpretation(); /* Aufruf der Interpretationsregelausfuehrung (im imperativen Teil {... } !) */ } protected void interpret() /* Block mit Interpretationsregeln */ [ Flower ==> RH(30) for ((1:5)) ( RH(72) [ RL(80) F(8, 1, 9) ] ); ]

25 public void run() { [ Axiom ==> A; A ==> Scale(0.3333) for (int i:(-1:1)) for (int j:(-1:1)) if ((i+1)*(j+1) != 1) ( [ Translate(i, j, 0) A ] ); ] applyInterpretation(); } public void interpret() [ A ==> Box; ] weiteres Beispiel: erzeugt den sogenannten „Menger-Schwamm“ (ein Fraktal)

26 public void run() { [ Axiom ==> A; A ==> Scale(0.3333) for (int i:(-1:1)) for (int j:(-1:1)) if ((i+1)*(j+1) != 1) ( [ Translate(i, j, 0) A ] ); ] applyInterpretation(); } public void interpret() [ A ==> Box; ] (a) (b)(c) A ==> Sphere(0.5); A ==> Box(0.1, 0.5, 0.1) Translate(0.1, 0.25, 0) Sphere(0.2);

27 was wird durch dieses Beispiel erzeugt? public void run() { [ Axiom ==> [ A(0, 0.5) D(0.7) F(60) ] A(0, 6) F(100); A(t, speed) ==> A(t+1, speed); ] applyInterpretation(); } public void interpret() [ A(t, speed) ==> RU(speed*t); ]

28 Hausaufgabe: 1. Bearbeiten Sie im ILIAS-Lernmodul „Einführung in GroIMP“ (verfügbar über StudIP) die Lektionen 13 - 16 und 20 - 22. 2. Lesen Sie Chapter 1, Section 1.8 im Buch „The Algorithmic Beauty of Plants“ von P. Prusinkiewicz und A. Lindenmayer (= S. 30-35). (Beachten Sie die abweichende Notation für kontextsensitive Regeln.)


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

Ähnliche Präsentationen


Google-Anzeigen