Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik 2. Vorlesung:
letztes Mal: Modelldreieck für Pflanzenmodelle reine Strukturmodelle, Motivation 3 Ebenen der Strukturbeschreibung 2 Arten der statischen Beschreibung - tabellarisch (dtd-Format) - imperativ (turtle geometry) (noch nicht behandelt) Einstieg in GroIMP (Bedienung)
heute: GroIMP: Laden von dtd-Dateien erste Analysen von Verzweigungssystemen Programmierparadigmen Turtle-Geometrie Ausführung von Turtle-Geometrie-Befehlsfolgen mit GroIMP
Laden von dtd-Dateien in GroIMP File / Open: dtd-Datei wählen (öffnen) Verzweigungsstruktur erscheint in der 3D-Ansicht ggf. Kameraeinstellungen ändern Verändern der Datei und speichern Änderung wird im Display sichtbar
Einfache Analysen einige Möglichkeiten wurden aus der Vorgängersoftware GROGRA übernommen Panels / RGG Panels / GROGRA functions / Analysis dort: - list of all shoots (erzeugt komplette Liste) - elementary analysis - basic tree parameters - topological analysis (später mehr)
Der Begriff "Programmierparadigma" Paradigma: grundlegende Denkweise, beispielorientierte Vorstellung Paradigmen der Programmierung
Paradigma: "Beschreibt eine Menge von Theorien, Standards und Methoden, die gemeinsam einen Weg repräsentieren, Wissen zu organisieren" Thomas Kuhn 1970: The Structure of Scientific Revolutions
Paradigma: "Beschreibt eine Menge von Theorien, Standards und Methoden, die gemeinsam einen Weg repräsentieren, Wissen zu organisieren" Thomas Kuhn 1970: The Structure of Scientific Revolutions Paradigmenwechsel: schwierig. Revolution im Denken!
wurde aufgegriffen von Robert Floyd 1978: Turing Award Lecture "The Paradigms of Programming" Robert W. Floyd ( )
Welche Paradigmen werden nahegelegt durch Probleme bei der Simulation natürlicher Objekte ?... bei deren computergrafischer Darstellung ?
Ökologie:
Organismen
Ökologie: Organismen Aufbau beschreiben
Ökologie: Organismen Verhalten (unter bestimmten Bedingungen) Aufbau beschreiben
Ökologie: Organismen Verhalten (unter bestimmten Bedingungen) Aufbau beschreiben Gesetzmäßigkeiten (Regeln) bestimmen
Ökologie: Organismen Verhalten (unter bestimmten Bedingungen) Prozesse Aufbau beschreiben Gesetzmäßigkeiten (Regeln) bestimmen
Ökologie: Organismen Verhalten (unter bestimmten Bedingungen) Prozesse Aufbau beschreiben Gesetzmäßigkeiten (Regeln) bestimmen Ablauf berechnen
Grafisches System:
Objekte
Grafisches System: Objekte (mit Attributen)
Grafisches System: Objekte (mit Attributen) regelmäßige Strukturen
Grafisches System: Objekte (mit Attributen) regelmäßige Strukturen Prozesse
Einige wichtige Programmierparadigmen -für numerische Simulation von Prozessen: imperatives Paradigma
Einige wichtige Programmierparadigmen -für numerische Simulation von Prozessen: imperatives Paradigma (auch: von-Neumann-Paradigma, Kontrollfluss-Paradigma) John von Neumann ( )
"Befehls-Programmierung" Computer = ? imperativ:
"Befehls-Programmierung" Computer = Maschine zur Veränderung von Variablen- werten.
"Befehls-Programmierung" Computer = Maschine zur Veränderung von Variablen- werten (diese Veränderungen können Seiteneffekte haben).
"Befehls-Programmierung" Computer = Maschine zur Veränderung von Variablen- werten. Programm = ?
"Befehls-Programmierung" Computer = Maschine zur Veränderung von Variablen- werten. Programm = Plan für den Berechnungsprozess mit Angabe der Befehle und des Kontrollflusses (z.B. Schleifen).
"Befehls-Programmierung" Computer = Maschine zur Veränderung von Variablen- werten. Programm = Plan für den Berechnungsprozess mit Angabe der Befehle und des Kontrollflusses (z.B. Schleifen). Programmfindung: ?
"Befehls-Programmierung" Computer = Maschine zur Veränderung von Variablen- werten. Programm = Plan für den Berechnungsprozess mit Angabe der Befehle und des Kontrollflusses (z.B. Schleifen). Programmfindung: Elementare Einzelschritte finden und in passende, flexible Reihenfolge bringen.
"Befehls-Programmierung" Computer = Maschine zur Veränderung von Variablen- werten. Programm = Plan für den Berechnungsprozess mit Angabe der Befehle und des Kontrollflusses (z.B. Schleifen). Programmfindung: Elementare Einzelschritte finden und in passende, flexible Reihenfolge bringen. Programmiersprachen, die dieses Paradigma unterstützen: Fortran, Pascal, C,..., Teile von Java,...
Beispiel: x = 0; while (x < 100) x = x + 1; Inhalt der Variable x wird verändert Schleife legt Kontrollfluss fest
Beispiel: x = 0; while (x < 100) x = x + 1; Inhalt der Variable x wird verändert Schleife legt Kontrollfluss fest Beachte: "=" steht hier nicht für math. Gleichheit, sondern für Zuweisung (prozesshaft)!
Nachteil des imperativen Paradigmas: simultane, parallele Zuweisung wird nicht unterstützt
Nachteil des imperativen Paradigmas: simultane, parallele Zuweisung wird nicht unterstützt Beispiel (Floyd 1978): Räuber-Beute-System, beschrieben durch R neu = f(R, B), B neu = g(R, B) Anfängerfehler beim Programmieren: for (i =... ) { R = f(R, B); B = g(R, B); }
Nachteil des imperativen Paradigmas: simultane, parallele Zuweisung wird nicht unterstützt Beispiel (Floyd 1978): Räuber-Beute-System, beschrieben durch R neu = f(R, B), B neu = g(R, B) Anfängerfehler beim Programmieren: for (i =... ) { R = f(R, B); B = g(R, B); }
Programmiersprachen, die das imperative Paradigma unterstützen: Fortran, Pascal, C,..., Teile von Java, Befehlssprache der Turtle-Geometrie
Turtle: zeichnende Schildkröte, die auf Befehle hört
Turtle: zeichnende Schildkröte, die auf Befehle hört
F0
F0 RU(90)
F0 RU(90) F0
F0 RU(90) F0 RU(90) LMul(0.5) F0
(später mehr)
zurück zum Beispiel: Objekte (mit Attributen)
Objektorientiertes Paradigma Computer = Umgebung für virtuelle Objekte Programm = Auflistung von (Objekt-) Klassen, d.h. allgemeiner Spezifikationen von Objekten, die zur Laufzeit des Programms (ggf. mehrfach) erschaffen und wieder vernichtet werden können und miteinander kommunizieren. Programmfindung: Spezifikation der Klassen (Daten und Methoden), die Objektstruktur und -verhalten festlegen. Programmiersprachen: Smalltalk, Simula, C++, Java,...
Beispiel: public class Auto extends Fahrzeug { public String marke; public int plaetze; public void anzeigen() { System.out.println("Das Auto ist ein " + marke); System.out.println("Es hat " + plaetze + "Sitze."); } typisch: Klassen ( Auto ) mit Daten ( marke, plaetze ) und Methoden ( anzeigen )
Vererbung von Attributen und Methoden von Ober- an Unterklassen Beispiel: public class Auto extends Fahrzeug { public String marke; public int plaetze; public void anzeigen() { System.out.println("Das Auto ist ein " + marke); System.out.println("Es hat " + plaetze + "Sitze."); } typisch: Klassen ( Auto ) mit Daten ( marke, plaetze ) und Methoden ( anzeigen )
Objekthierarchien sind auch in der Biologie sinnvoll zum Beispiel: Organ BlattBlüteInternodiumWurzelsegment Laub- blatt NadelGrob- WS Fein- WS
regelmäßige Strukturen
Regelbasiertes Paradigma Computer = Transformationsmaschine für Strukturen Es gibt eine aktuelle Struktur, die solange transformiert wird, wie dies möglich ist.
Regelbasiertes Paradigma Computer = Transformationsmaschine für Strukturen Es gibt eine aktuelle Struktur, die solange transformiert wird, wie dies möglich ist. Arbeitsprozess: Such- und Anwendungsprozess. matching: Suchen einer passenden Regel, rewriting: Anwendung der Regel, um die Struktur umzuschreiben.
Regelbasiertes Paradigma Computer = Transformationsmaschine für Strukturen Es gibt eine aktuelle Struktur, die solange transformiert wird, wie dies möglich ist. Arbeitsprozess: Such- und Anwendungsprozess. matching: Suchen einer passenden Regel, rewriting: Anwendung der Regel, um die Struktur umzuschreiben. Programm = Menge von Transformationsregeln
Regelbasiertes Paradigma Computer = Transformationsmaschine für Strukturen Es gibt eine aktuelle Struktur, die solange transformiert wird, wie dies möglich ist. Arbeitsprozess: Such- und Anwendungsprozess. matching: Suchen einer passenden Regel, rewriting: Anwendung der Regel, um die Struktur umzuschreiben. Programm = Menge von Transformationsregeln Programmfindung: Spezifikation der Regeln
Regelbasiertes Paradigma Computer = Transformationsmaschine für Strukturen Es gibt eine aktuelle Struktur, die solange transformiert wird, wie dies möglich ist. Arbeitsprozess: Such- und Anwendungsprozess. matching: Suchen einer passenden Regel, rewriting: Anwendung der Regel, um die Struktur umzuschreiben. Programm = Menge von Transformationsregeln Programmfindung: Spezifikation der Regeln Programmiersprachen: L-System-Sprachen, KI-Sprachen, Prolog,...
Regelsysteme zur Ersetzung von Zeichenketten Beispiel: L-Systeme (Lindenmayer-Systeme) (in Kürze mehr)
ebenfalls regelbasierter Mechanismus: Graph-Grammatiken
ebenfalls regelbasierter Mechanismus: Graph-Grammatiken Regel:
ebenfalls regelbasierter Mechanismus: Graph-Grammatiken Regel: Anwendung:
Zusammenfassung: Programmierparadigmen
Zusammenfassung: Programmierparadigmen ● imperativ
Zusammenfassung: Programmierparadigmen ● imperativ - Veränderung von Variablen - Turtle-Geometrie
Zusammenfassung: Programmierparadigmen ● imperativ - Veränderung von Variablen - Turtle-Geometrie ● objektorientiert
Zusammenfassung: Programmierparadigmen ● imperativ - Veränderung von Variablen - Turtle-Geometrie ● objektorientiert ● regelbasiert
Zusammenfassung: Programmierparadigmen ● imperativ - Veränderung von Variablen - Turtle-Geometrie ● objektorientiert ● regelbasiert - L-Systeme - Graph-Grammatiken
Zusammenfassung: Programmierparadigmen ● imperativ - Veränderung von Variablen - Turtle-Geometrie ● objektorientiert ● regelbasiert - L-Systeme - Graph-Grammatiken ● weitere: funktional; nebenläufig; chemisch...
Anwendungsschwerpunkte: prozedural: Numerik, z.B. Lösen von Gleichungssystemen Bsp. Photosynthese; Baumwasserfluss (Darcy-Gesetz = DGL, diskretisiert, numerisches Lösungsverfahren) regelbasiert: Entwicklung verzweigter Strukturen (lokal 1-D) Bsp. Pflanzen logische Abhängigkeiten Bsp. Wissensbasierte Systeme objektorientiert: Ensembles interagierender Objekte Bsp. Tierindividuen
Synthese: Die Sprache XL „eXtended L-system language“ Programmiersprache, die parallele Graph- Grammatiken (RGG) einfach verfügbar macht
imperativobjektorientiertregelbasiert Java XL
F0 RU(90) F0 RU(90) LMul(0.5) F0 Turtle-Geometrie
(Turtle geometry, "Schildkrötengeometrie")
Turtle-Geometrie
Turtle-Geometrie in GroIMP
Wie man eine Turtle-Befehlsfolge mit GroIMP ausführt schreiben Sie in eine GroIMP-Projektdatei (oder in eine Datei mit Endung.rgg ): protected void init() [ Axiom ==> Turtle-Befehlsfolge ]
Beispiel: Zeichnen eines Dreiecks protected void init() [ Axiom ==> RU(30) F(10) RU(120) F(10) RU(120) F(10) ] siehe Datei sm09_b01.rgg
Wiederholung von Abschnitten der Zeichenkette möglich mit " for " z.B. for ((1:3)) ( A B C ) liefert A B C A B C A B C
was ist das Ergebnis der Interpretation von L(10) for ((1:6)) ( F0 RU(90) LMul(0.8) ) ?
L(10) for ((1:6)) ( F0 RU(90) LMul(0.8) )
anderes Beispiel: for ((1:20)) ( for ((1:36)) ( F0 RU(165) F0 RU(165) ) RU(270) )
anderes Beispiel: for ((1:20)) ( for ((1:36)) ( F0 RU(165) F0 RU(165) ) RU(270) )
Erweiterung auf 3D-Grafik: Turtle-Rotationen um 3 Achsen
Erweiterung auf 3D-Grafik: Turtle-Rotationen um 3 Achsen head left up
Erweiterung auf 3D-Grafik: Turtle-Rotationen um 3 Achsen head left up
Erweiterung auf 3D-Grafik: Turtle-Rotationen um 3 Achsen RH RL RU
3D-Befehle: RU(45) Drehung der turtle um die "up"-Achse um 45° RL(... ), RH(... ) analog um "left" und "head"-Achse up-, left- und head-Achse bilden ein rechtwinkliges, räumliches Koordinatensystem, das von der turtle mitgeführt wird RV(x) Rotation "nach unten" mit durch x vorgegebener Stärke RG Rotation ganz nach unten (Richtung (0, 0, -1))
Beispiel: L(100) D(3) RU(-90) F(50) RU(90) M0 RU(90) D(10) F0 F0 D(3) RU(90) F0 F0 RU(90) F(150) RU(90) F(140) RU(90) M(30) F(30) M(30) F(30) RU(120) M0 Sphere(15) erzeugt was ist das Ergebnis der Interpretation der Zeichenkette L(10) F0 RU(45) F0 RU(45) LMul(0.5) F0 M0 F0 ?
Verzweigungen: Realisierung mit Speicher-Befehlen [ lege aktuellen Zustand auf Speicher ("Ablage", Stack) ] nimm obersten Zustand von der Ablage und mache diesen zum aktuellen Zustand (damit: Ende der Verzweigung)
Verzweigungen: Realisierung mit Speicher-Befehlen [ lege aktuellen Zustand auf Speicher ("Ablage", Stack) ] nimm obersten Zustand von der Ablage und mache diesen zum aktuellen Zustand (damit: Ende der Verzweigung) F0 [ RU(-40) F0 ] RU(20) DMul(2) F0
Verzweigungen: Realisierung mit Speicher-Befehlen [ lege aktuellen Zustand auf Speicher ("Ablage", Stack) ] nimm obersten Zustand von der Ablage und mache diesen zum aktuellen Zustand (damit: Ende der Verzweigung) F0 [ RU(-40) F0 ] RU(20) DMul(2) F0
Mit welchen Turtle-Befehlsfolgen erzeugt man die folgenden Strukturen ?
Hausaufgabe zum nächsten Mal: Bearbeiten Sie im ILIAS-Lernmodul „Einführung in GroIMP“ (verfügbar über StudIP): - Einführung - Lektionen Lektion 23 (beachten Sie, dass das Laden von dtd-Dateien in der aktuellen GroIMP-Version einfacher ist als dort dargestellt)