Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
1
Struktur-Funktions-Modelle von Pflanzen
- Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik 6. Vorlesung: (5. VL war Physiologie-Vorlesung; s. StudIP)
2
letztes Mal: einfache Verzweigungsmuster, modelliert mit L-Systemen
weitere L-System-Beispiele Hinweise zu den Messungen und zu den dtd-Dateien
3
als nächstes: Verwendung von imperativem Code in XL-Programmen
Verwendung von Schleifen und Arrays bei Verzweigungs-Konstruktionen konditionale Regelanwendung (Beispiele) Einbau von Texturen in Pflanzenmodelle Anlegen eines Projekts in GroIMP
4
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
5
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!)
6
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
7
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:
8
mathematische Konstanten:
Math.PI Math.E e logische Operatoren: && und || oder ! nicht
9
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
10
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."); }
11
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.");
12
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."); }
13
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 <= ) println(funktion(a)); /* wende Funktion an und gib aus */ a += 0.1; /* inkrementiere a */ println("Ende.");
14
Schachtelung von regelbasiertem und imperativem Code in XL
15
Schachtelung von regelbasiertem und imperativem Code in XL
16
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 ( ... ) )
17
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) ] ); ]
18
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) ]; ]
19
Erweiterung zum Beispiel sm09_b07
Erweiterung zum Beispiel sm09_b07.rgg (farbige Koch-Kurve) mit eingefügtem imperativen Code: sm09_b07a.rgg Weitergabe von Informationen (hier: Farbe) an Nachfolgeobjekte
20
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
21
Farben setzen in XL (Zusammenfassung)
22
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...
24
Beispiel mit Baum-Foto als Textur für das Rechteck:
25
sm09_b10.gsz Verwendung einer Blatt-Textur
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
26
Hausaufgabe zum nächsten Mal:
Bearbeiten Sie im ILIAS-Lernmodul „Einführung in GroIMP“ (verfügbar über StudIP) die Lektionen 5 – 12.
Ähnliche Präsentationen
© 2025 SlidePlayer.org Inc.
All rights reserved.