24
Struktur-Funktions-Modelle von Pflanzen - Sommersemester 2009 - Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik 4. Vorlesung: 7. 5. 2009

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

Embed Size (px)

Citation preview

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

Struktur-Funktions-Modelle von Pflanzen- Sommersemester 2009 -

Winfried Kurth

Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik

4. Vorlesung: 7. 5. 2009

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

letztes Mal: • einfache L-Systeme (Zeichenkettenersetzungssysteme)

• ihre Ausführung mit GroIMP

• einfache Verzweigungsmuster, modelliert mit L-Systemen

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

als nächstes:

• weitere L-System-Beispiele

• Verwendung von imperativem Code in XL-Programmen

• konditionale Regelanwendung

• stochastische L-Systeme

• kontextsensitive L-Systeme

• Einbau von Texturen in Pflanzenmodelle

• Anlegen eines Projekts in GroIMP

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

welche Struktur liefert

Axiom ==> F(10) A ;

A ==> [ RU(-60) F(6) RH(180) A Sphere(3) ] [ RU(40) F(10) RH(180) A Sphere(3) ];

Sphere ==> Z; ?

(F(n) liefert Linie der vorgegebenen Länge n,Sphere(n) eine Kugel mit Radius n)

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

Welche Struktur wird von folgendem parametrischem L-System erzeugt?

Axiom ==> [ RU(90) M(1) RU(90) A(1) ] A(1);

A(n) ==> F(n) RU(90) A(n+1);

Variante:

in der zweiten Regel "RU(90)" etwa durch "RU(92)" ersetzen.

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

Testen Sie die Beispiele

sm09_b04.rgg Zwei Regelblöcke

sm09_b05.rgg wechselständiges Wachstum

sm09_b06.rgg gegenständiges Wachstum

sm09_b07.rgg Farbgebung für einzelne Elementedurch imperativen Code

sm09_b08.rgg Verwendung eigener Module

sm09_b21.rgg Seitenzweig-Positionierung

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

Verwendung von imperativem Code in XL-Programmen

Befehle wie Zuweisungen von Werten zu Variablen, Additionen, Funktionsausführungen, Ausgabe (Druckbefehle) usw. werden mit der gleichen Schreibweise wie in der Programmiersprache Java angegeben und in geschweifte Klammern { ... } eingeschlossen.

Beispiele:

int i; // Deklaration einer ganzzahligen Variablen mit Namen i

float a = 0.0; // Deklaration u. Initialisierung einer Gleitkomma-Var.

int[] x = new int[20]; // Deklaration eines Arrays (Datenfeldes) // der Länge 20; Zugriff: x[0], ..., x[19]float[] y = { 0.1, 0.2, 0.7, -1.4 }; // Deklaration und Initialisierung eines Arrays

i = 25; // Zuweisung

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

Verwendung von imperativem Code (Fortsetzung)

i++; // i wird um 1 erhöht

i--; // i wird um 1 vermindert

i += 5; // i wird um 5 erhöht

i -= 5; // i wird um 5 vermindert

i *= 2; // i wird verdoppelt

i /= 3; // i wird gedrittelt

n = m % a; // n wird der Rest von m bei ganzzahl. Division durch a zugew.

x = Math.sqrt(2); // x wird die Quadratwurzel aus 2 zugewiesen

if (x != 0) { y = 1/x; } // bedingte Zuweisung von 1/x an y

while (i <= 10) { i++; } // Schleife: solange i 10 ist, // wird i um 1 erhöht

for (i = 0; i < 100; i++) { x[i] = 2*i; } // imperative // for-Schleifeif (i == 0) { ... } // Test auf Gleichheit ( „=“ wäre Zuweisung!)

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

Datentypen:

int ganze Zahlen

float Gleitkommazahlen

double Gleitkommazahlen, doppelte Präzision

char Zeichen (characters)

void leerer Typ (für Funktionen, die nichts zurückgeben)

mathematische Konstanten:

Math.PI

Math.E e

logische Operatoren:

&& und

|| oder

! nicht

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

mathematische Funktionen:

Math.abs Absolutbetrag Math.sqrt Quadratwurzel

Math.acos Arcuscosinus Math.tan Tangens

Math.asin Arcussinus Math.toDegrees

Math.atan Arcustangens Math.toRadians

Math.cos Cosinus Umrechung Gradmaß

Math.exp Exponentialfunktion ex Bogenmaß

Math.log natürlicher Logarithmus

Math.max Maximum zweier Zahlen

Math.min Minimum zweier Zahlen

Math.round Rundungsfunktion

Math.sin Sinus

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

sm_progbsp01.rgg: schreibt die Zahlen von 1 bis 10 auf die GroIMP-Konsole

protected void init()

{

int i;

for (i=1; i<= 10; i++)

println(i);

println("Ende.");

}

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

sm_progbsp02.rgg: schreibt ungerade Quadratzahlen

protected void init()

{

int a, b;

for (a = 1; a <= 10; a++)

{

b = a*a;

if (b % 2 != 0) println(b);

}

println("Ende.");

}

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

sm_progbsp03.rgg: schreibt die Fibonacci-Zahlen

protected void init() { int i; int[] fibo = new int[20]; /* Array-Deklaration */ fibo[0] = fibo[1] = 1; for (i=2; i <= 19; i++) fibo[i] = fibo[i-1] + fibo[i-2]; for (i=0; i <= 19; i++) println(fibo[i]); println("Ende."); }

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

sm_progbsp04.rgg: Verwendung einer Funktion

/* ein einfaches imperatives Programm: Eine selbstgeschriebene Funktion berechnet x2 + 1; diese wird fuer x von 0 bis 1 in 0.1-Schritten ausgewertet. Man achte auf Rundungsfehler und auf die richtige Obergrenze fuer x. */

public float funktion(float x) { return x*x + 1; } protected void init() { float a = 0.0; /* Gleitkommazahl */ while (a <= 1.00001) { println(funktion(a)); /* wende Funktion an und gib aus */ a += 0.1; /* inkrementiere a */ } println("Ende."); }

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

Man teste die Beispiele

sm09_b20.rgg Verwendung von Arrays

sm09_b22.rgg for-Schleife für Seitenzweige

sm09_b11.rgg Bedingungen für Regelanwendungen

sm09_b12.rgg Bedingungen für Regelanwendungen(2. Variante)

sm09_b13.rgg Verknüpfung zweier Bedingungen

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

Stochastische L-SystemeVerwendung 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 ] );

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

Beispiel: Fichtenmodell in 3D

mit L-System erzeugt

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

XL-Funktionen für Pseudozufallszahlen:

Math.random() erzeugt Gleitkomma-Zufallszahl zwischen 0 und 1

random(a, b) erzeugt Gleitkomma-Zufallszahl zwischen a und b

probability(x) liefert 1 mit Wahrscheinlichkeit x,0 mit Wahrscheinlichkeit 1–x

Man teste das Beispiel

sm09_b19.rgg Stochastisches L-System

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

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

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

Kontextsensitivität

Abfrage eines Kontexts, der vorhanden sein muss, damit eine Regel anwendbar ist

Angabe des Kontexts in (* .... *)

Beispiel:

module A(int age);module B(super.length, super.color) extends F(length, 3, color);Axiom ==> A(0);A(t), (t < 5) ==> B(10, 2) A(t+1); // 2 = grünA(t), (t == 5) ==> B(10, 4); // 4 = rotB(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

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

Man teste die Beispiele

sm09_b14.rgg Verwendung eines linken Kontexts

sm09_b15.rgg Verwendung eines rechten Kontexts

sm09_b10.gsz Verwendung einer Oberflächentextur (Blatttextur)

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

Anleitung zum Erstellen eines GroIMP-Projekts mit Texturen aus bereitgestellten Grafikdateien (z.B. Blatt- oder Rindenfotos)

1. File New RGG Project

2. Namen der RGG-Datei (Textdatei) eingeben

3. aus dem GroIMP-Editor das Default-Programm löschen, neues Programm schreiben oder einfügen

4. in Editor speichern (automatische Kompilation muss erfolgreich sein) - texturierte Objekte werden noch vereinfacht dargestellt

5. Panels Explorers 3D Shaders Object New Lambert

6. Namen „Lambert“ zweimal anklicken (mit Pause), überschreiben mit dem Namen, der im Programm vorgesehen ist (Argument der Funktion „shader(...)“ ), abschließen mit <return>

7. Doppelklicken auf Kugel-Icon Attribute Editor öffnet sich

8. dort anklicken: Diffuse colour Surface Maps Image

9. dort anklicken: Image [ ? ] From File

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

Projekt anlegen(Fortsetzung)

10. Bilddatei auswählen, „öffnen“

11. „Add the file“: OK

12. Editor-Datei neu speichern / kompilieren

- texturierte Objekte werden nun mit Textur dargestellt

13. Speichern des gesamten Projekts:

File Save, Namen des Projekts eingeben (muss nicht mit Namen der RGG-Programmdatei übereinstimmen).

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

Hausaufgabe:

Lesen Sie Chapter 1, Section 1.7 – 1.10 (ohne 1.9) im Buch „The Algorithmic Beauty of Plants“ von P. Prusinkiewicz und A. Lindenmayer (online verfügbar, siehe Literaturseite zur Veranstaltung). (= S. 28-50 ohne Abschnitt 1.9).