Teil 2: Programmierparadigmen, Turtle

Werbung
Struktur-Funktions-Modelle von Pflanzen
- Sommersemester 2014 -
Winfried Kurth
Universität Göttingen, Lehrstuhl Computergrafik und
Ökologische Informatik
2. Vorlesung: 8. 5. 2014
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)
heute:
• Einstieg in GroIMP (Grundfunktionen der 3D-Ansicht)
• 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)
Paradigmen der Programmierung
Der Begriff "Programmierparadigma"
Paradigma:
grundlegende Denkweise,
beispielorientierte Vorstellung
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 (1936-2001)
Welche Paradigmen werden nahegelegt
durch Probleme...
... bei der Simulation natürlicher Objekte ?
... bei deren computergrafischer Darstellung ?
Ökologie:
Ökologie:
Organismen
Ökologie:
Organismen
Aufbau beschreiben
Ökologie:
Verhalten
Organismen
Aufbau beschreiben
(unter bestimmten
Bedingungen)
Ökologie:
Verhalten
Organismen
(unter bestimmten
Bedingungen)
Aufbau beschreiben
Gesetzmäßigkeiten
(Regeln) bestimmen
Ökologie:
Verhalten
Organismen
(unter bestimmten
Bedingungen)
Aufbau beschreiben
Prozesse
Gesetzmäßigkeiten
(Regeln) bestimmen
Ökologie:
Verhalten
Organismen
(unter bestimmten
Bedingungen)
Aufbau beschreiben
Prozesse
Ablauf berechnen
Gesetzmäßigkeiten
(Regeln) bestimmen
Grafisches System:
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 (1903-1957)
imperativ:
"Befehls-Programmierung"
Computer = ?
"Befehls-Programmierung"
Computer = Maschine zur Veränderung von Variablenwerten.
"Befehls-Programmierung"
Computer = Maschine zur Veränderung von Variablenwerten (diese Veränderungen können Seiteneffekte haben).
"Befehls-Programmierung"
Computer = Maschine zur Veränderung von Variablenwerten.
Programm = ?
"Befehls-Programmierung"
Computer = Maschine zur Veränderung von Variablenwerten.
Programm = Plan für den Berechnungsprozess mit
Angabe der Befehle und des Kontrollflusses (z.B.
Schleifen).
"Befehls-Programmierung"
Computer = Maschine zur Veränderung von Variablenwerten.
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 Variablenwerten.
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 Variablenwerten.
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
Rneu = f(R, B),
Bneu = 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
Rneu = f(R, B),
Bneu = 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
F0 RU(90)
F0 RU(90)
F0 RU(90) F0
F0 RU(90) F0
F0 RU(90) F0 RU(90) LMul(0.5) 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)
Beispiel:
Vererbung von
Attributen und
Methoden von Oberan Unterklassen
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
Blatt
Blüte
Laubblatt
Nadel
Internodium Wurzelsegment
GrobWS
FeinWS
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, ...
Beispiel: L-Systeme (Lindenmayer-Systeme)
Regelsysteme zur Ersetzung von
Zeichenketten
(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 GraphGrammatiken (RGG) einfach verfügbar macht
imperativ
objektorientiert
Java
XL
regelbasiert
Turtle-Geometrie
F0 RU(90) F0 RU(90) LMul(0.5) F0
(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))
liefert
( A B C )
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
left
head
up
Erweiterung auf 3D-Grafik:
Turtle-Rotationen um 3 Achsen
left
head
up
Erweiterung auf 3D-Grafik:
Turtle-Rotationen um 3 Achsen
RL
RH
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 1 - 4
- Lektion 23 (beachten Sie, dass das Laden von dtd-Dateien
in der aktuellen GroIMP-Version einfacher ist als dort
dargestellt)
Herunterladen