Struktur-Funktions-Modelle von Pflanzen

Slides:



Advertisements
Ähnliche Präsentationen
ALP II: Objektorientierte Programmierung Sommersemester 2006
Advertisements

der Universität Oldenburg
Forschungszentrum caesar
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Schleifen mit der Turtle
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Einführung in die Programmiersprache C 1
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
BMEVIEEA100 Grundlagen der Programmierung
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
Übersicht Nachtrag zu Ausdrücken
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Diskrete Mathematik I Vorlesung 2 Arrays.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Variablen und Datentypen
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Struktur-Funktions-Modelle von Pflanzen
Struktur-Funktions-Modelle von Pflanzen
Struktur-Funktions-Modelle von Pflanzen
Struktur-Funktions-Modelle von Pflanzen
Hello World! Javakurs 2013 Arne Kappen
Struktur-Funktions-Modelle von Pflanzen
Struktur-Funktions-Modelle von Pflanzen
Java-Kurs - 4. Übung weitere Kontrollstrukturen
Struktur-Funktions-Modelle von Pflanzen
Struktur-Funktions-Modelle von Pflanzen
Struktur-Funktions-Modelle von Pflanzen
Struktur-Funktions-Modelle von Pflanzen
Java-Kurs - 2. Übung primitive Datentypen, Konstanten
Unterschiedliche Kontrollstrukturen
Syntax: while ( BEDINGUNG ) { // Anweisungen die so lange immer wieder ausgeführt // werden, wie die Bedingung zutrifft } for (INITIALISIERUNG; BEDINGUNG;
SS 04 Christiane Rauh Christian Hellinger
Arten von Kontrollstrukturen
Schleifen mit der Turtle
Struktur-Funktions-Modelle von Pflanzen
1. Die rekursive Datenstruktur Liste 1.3 Rekursive Funktionen
9. Vererbung und Polymorphie
Schleifen Datenfelder (Arrays) Verzweigungen
 Präsentation transkript:

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

letztes Mal: Ausführung einfacher L-Systeme mit GroIMP einfache Verzweigungsmuster, modelliert mit L-Systemen parametrische L-Systeme

als nächstes: weitere L-System-Beispiele Verwendung von imperativem Code in XL-Programmen Verwendung von Schleifen und Arrays bei Verzweigungen konditionale Regelanwendung (Beispiele)

sm09_b04.rgg mehrere Regelblöcke zur Auswahl Beispiele: sm09_b04.rgg mehrere Regelblöcke zur Auswahl //----------- Extension to the alphabet ------------- // Shoot() is an extension of the turtle command F() and stands for an annual shoot module Shoot(float len) extends F(len); // Bud is an extension of a sphere obeject and stands for a terminal bud module Bud(float strength) extends Sphere(0.2) {{ setShader(RED); setTransform(0, 0, 0.3); }}; // Startblock mit dem Startwort protected void init() [ Axiom ==> Bud(5); ] // erster öffentlicher Block (erscheint im Menü als Button) public void wachse() Bud(x), (x > 2) ==> Shoot(x) [ RU(50) Bud(0.7*x) ] [ RU(-50) Bud(0.7*x) ] Bud(x); // zweiter öffentlicher Block (erscheint im Menü als Button) public void stirb() Bud(x), (x < 3) ==> ;

sm09_b05.rgg wechselständiges Wachstum // Definition einer Terminalknospe als Erweiterung einer Kugel: module B(float len, float w) extends Sphere(0.1) {{setShader(GREEN);}} // Definition einer Seitenknospe als Erweiterung einer Kugel: module LB(float len) extends Sphere(0.1) {{setShader(GREEN);}} // Definition eines Internodiums als Erweiterung des Moduls F: module I(float len) extends F(len); // Startmethode mit dem Axiom (erzeugt eine Knospe) protected void init() [ Axiom ==> B(1, 30); ] // Block, welcher interaktiv ausgeführt werden kann. // Er erscheint im Menü. // Enthält 2 Regeln: je eine für jeden Knospentyp. public void run() // über die Multiplikation des Winkels mit -1 // wird die Wechselständigkeit erreicht B(x, w) ==> I(x) [ RU(w) RH(90) LB(0.3*x) ] B(0.95*x, -w); LB(x) ==> I(x) LB(x);

sm09_b06.rgg gegenständiges Wachstum // I für Internode erweitert das Turtle-Kommando F module I(float len) extends F(len); // B steht für eine Knospe (Bud) und wird nicht gezeichnet module B(float len); protected void init() [ Axiom ==> B(5); ] public void run() // Rotation um die up-Achse (RU) und um die head-Achse (RH) B(x) ==> I(x) [ RU(30) RH(90) B(0.7*x) ] [ RU(-30) RH(90) B(0.7*x) ];

weitere Beispiele: sm09_b07.rgg Farbgebung für einzelne Elemente durch imperativen Code sm09_b08.rgg Verwendung eigener Module sm09_b21.rgg Seitenzweig-Positionierung

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

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-Schleife if (i == 0) { ... } // Test auf Gleichheit ( „=“ wäre Zuweisung!)

mathematische Konstanten: logische Operatoren: 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

einfache Datentypen: int ganze Zahlen float Gleitkommazahlen double Gleitkommazahlen, doppelte Präzision char Zeichen (characters) void leerer Typ (für Funktionen, die nichts zurückgeben) genauer:

mathematische Konstanten: Math.PI  Math.E e logische Operatoren: && und || oder ! nicht

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

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."); }

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.");

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."); }

sm_progbsp04.rgg: Verwendung einer Funktion /* ein einfaches imperatives Programm: Eine selbstgeschriebene Funktion berechnet x2 + 1; diese wird für x von 0 bis 1 in 0.1-Schritten ausgewertet. Man achte auf Rundungsfehler und auf die richtige Obergrenze für 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.");

Schachtelung von regelbasiertem und imperativem Code in XL

Schachtelung von regelbasiertem und imperativem Code in XL

Beachten Sie die unterschiedliche Syntax von Kontrollstrukturen im imperativen und im regelbasierten Teil von XL: imperativ: { // ... for (int i = 1; i <= 42; i++) x[i] = 3*i + 1; } regelbasiert: [ A(x) ==> for (int i = 1; i <= 7; i++) ( RU(15) F(x) ); ] (ebenso bei if ( ... ) )

Man teste die Beispiele sm09_b20.rgg Verwendung von Arrays sm09_b22.rgg for-Schleife für Seitenzweige Erweiterung zum Beispiel sm09_b07.rgg (farbige Koch-Kurve) mit eingefügtem imperativen Code: sm09_b07a.rgg Weitergabe von Informationen (hier: Farbe) an Nachfolgeobjekte

Beispiel für eine for-Schleife für Seitenzweige: sm09_b22.rgg protected void init() [ Axiom ==> F(10); ] public void seitenzweig() [ F(x) ==> F(x) L(x) for (int i=1; i<=5; i++) ( [ MRel(0.1*i+0.2) RU((-1**i)*30) F(x*0.2) ] ); ]

Beispiel für Verwendung von Arrays zur Steuerung von Längen und Winkeln: sm09_b20.rgg // ... const float[] laenge = { 1, 1, 0.5, 0.2}; const float[] winkel = {40, 50, 80 , 100 }; public void run1() [ a:A, (a[ordnung] < 4) ==> F(laenge[a[ordnung]]) [ RU( winkel[a[ordnung]]) RH(90) A(a[ordnung]+1) ] [ RU(-winkel[a[ordnung]]) RH(90) A(a[ordnung]+1) ]; ]

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

Hausaufgabe zum nächsten Mal: Bearbeiten Sie im ILIAS-Lernmodul „Einführung in GroIMP“ (verfügbar über StudIP) die Lektionen 5 – 12.