Struktur-Funktions-Modelle von Pflanzen - Sommersemester 2016 - Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik 5. Vorlesung: 26. 5. 2016
letztes Mal: Turtle-Geometrie deren Ausführung mit GroIMP einfache L-Systeme (Lindenmayer-Systeme; Zeichenketten-Ersetzungssysteme)
heute: L-Systeme: weitere Beispiele ihre Ausführung mit GroIMP einfache Verzweigungsmuster, modelliert mit L-Systemen
Beispiel für ein einfaches L-System: Regeln A ==> F0 [ RU(45) B ] A ; B ==> F0 B ; Startwort A (A und B werden normalerweise nicht geometrisch interpretiert.) Interpretation durch Turtle-Geometrie
was für eine Struktur liefert das L-System A ==> [ LMul(0.25) RU(-45) F0 ] F0 B; B ==> [ LMul(0.25) RU(45) F0 ] F0 A; mit Startwort L(10) A ?
was für eine Struktur liefert das L-System A ==> [ LMul(0.25) RU(-45) F0 ] F0 B; B ==> [ LMul(0.25) RU(45) F0 ] F0 A; mit Startwort L(10) A ? äquivalente Regel: A ==> [ LMul(0.25) RU(-45) F0 ] F0 RH(180) A;
Flächenfüllende Kurve: weiteres Beispiel: Flächenfüllende Kurve: Axiom ==> L(10) RU(-45) X RU(-45) F(1) RU(-45) X; X ==> X F0 X RU(-45) F(1) RU(-45) X F0 X
Flächenfüllende Kurve: Axiom ==> L(10) RU(-45) X RU(-45) F(1) RU(-45) X; X ==> X F0 X RU(-45) F(1) RU(-45) X F0 X
Flächenfüllende Kurve: Axiom ==> L(10) RU(-45) X RU(-45) F(1) RU(-45) X; X ==> X F0 X RU(-45) F(1) RU(-45) X F0 X indisches Kolam-Muster „Anklets of Krishna“
Beispiel für ein Fraktal: Koch'sche Kurve Axiom ==> RU(90) F(10); F(x) ==> F(x/3) RU(-60) F(x/3) RU(120) F(x/3) RU(-60) F(x/3)
Axiom ==> RU(90) F(10); F(x) ==> F(x/3) RU(-60) F(x/3) RU(120) F(x/3) RU(-60) F(x/3)
Axiom ==> RU(90) F(10); F(x) ==> F(x/3) RU(-60) F(x/3) RU(120) F(x/3) RU(-60) F(x/3)
Axiom ==> RU(90) F(10); F(x) ==> F(x/3) RU(-60) F(x/3) RU(120) F(x/3) RU(-60) F(x/3)
Axiom ==> RU(90) F(10); F(x) ==> F(x/3) RU(-60) F(x/3) RU(120) F(x/3) RU(-60) F(x/3)
Axiom ==> RU(90) F(10); F(x) ==> F(x/3) RU(-60) F(x/3) RU(120) F(x/3) RU(-60) F(x/3)
Axiom ==> RU(90) F(10); F(x) ==> F(x/3) RU(-60) F(x/3) RU(120) F(x/3) RU(-60) F(x/3) .
L-Systeme mit GroIMP in der Sprache XL: protected void init() Notation nach Prusinkiewicz & Lindenmayer: = 27.5 F F F [ + F ] F [ - F ] F in der Sprache XL: protected void init() [ Axiom ==> L(1) F0; ] public void run() [ F0 ==> F0 [ RU(-27.5) F0 ] F0 [ RU(27.5) F0 ] F0; ]
Beispieldatei sm09_b02.rgg : geschlossene Koch-Kurve, entwickelt aus Dreieck protected void init () [ Axiom ==> RU(50) F(10) RU(120) F(10) RU(120) F(10); ] // oeffentliche Methode zur interaktiven Verwendung in GroIMP // (ueber Button): public void anwendung () // Regeln muessen in []-Klammern gesetzt und mit ; beendet werden [ // jedes F() wird durch 4 kleinere F() ersetzt // die Laenge des F auf der linken Regelseite wird // durch das x auf die rechte Seite mit heruebergenommen F(x) ==> F(x/3) RU(-60) F(x/3) RU(120) F(x/3) RU(-60) F(x/3); ]
Deklaration neuer, eigener Symbole (Module): L-Systeme mit GroIMP Deklaration neuer, eigener Symbole (Module): module A; module B; protected void init() [ Axiom ==> A; ] public void run() [ A ==> L(1) F0 [ RU(45) B ] A; B ==> L(1) F0 B; ] » A und B werden hier nicht geometrisch interpretiert
Deklaration eigener Symbole mit geometrischer Interpretation: L-Systeme mit GroIMP Deklaration eigener Symbole mit geometrischer Interpretation: module A extends Sphere(0.1); module B extends Sphere(0.08); protected void init() [ Axiom ==> P(14) A; ] public void run() [ A ==> L(1) F0 [ RU(45) B ] A; B ==> L(1) F0 B; ]
Beispieldatei sm09_b03.rgg : /* Sie lernen an diesem Beispiel: - wie Sie ein einfaches Pflanzenmodell (nach dem Architekturmodell Schoute) erstellen - wie sie Verzweigungen (Subgraphen) mit [ ] angeben */ // Beispiel einer einfachen botanischen Baumstruktur (Architekturmodell Schoute) //------ Erweiterungen des Standard-Alphabets (Turtle-Kommandos) -------- // Shoot() ist eine Erweiterung des Turtle-Kommandos F() und steht fuer einen Jahres- // trieb module Shoot(float len) extends F(len); // Bud ist eine Erweiterung eines Kugel-Objekts und steht fuer eine Terminalknospe, // ihre „strength“ kontrolliert die Laenge des im naechsten Schritt erzeugten Triebes module Bud(float strength) extends Sphere(0.2) {{ setShader(RED); setTransform(0, 0, 0.3); }}; //----------------------------------------------------------- protected void init () [ // Startzustand (eine Knospe) Axiom ==> Bud(5); ] public void run () [ // eckige Klammern [] kennzeichnen einen Seitenzweig (Relation „branch“) // Rotationen um „upward“-Achse (RU) // Verminderung der Staerke der Knospe (in jedem Schritt um 20%) Bud(x) ==> Shoot(x) [ RU(30) Bud(0.8*x) ] [ RU(-30) Bud(0.8*x) ];
Verzweigung, alternierende Zweigstellung und Verkürzung: module A; Axiom ==> L(10) F0 A; A ==> LMul(0.5) [ RU(90) F0 ] F0 RH(180) A;
Verzweigung, alternierende Zweigstellung und Verkürzung: module A; Axiom ==> L(10) F0 A; A ==> LMul(0.5) [ RU(90) F0 ] F0 RH(180) A;
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)
Erweiterung des Symbol-Konzepts: Lasse reellwertige Parameter nicht nur bei Turtle-Kommandos wie "RU(45)" und "F(3)" zu, sondern bei allen Zeichen parametrische L-Systeme beliebig lange, endliche Parameterlisten Parameter werden bei Regel-Matching mit Werten belegt Beispiel: Regel A(x, y) ==> F(7*x+10) B(y/2) vorliegendes Zeichen z.B.: A(2, 6) nach der Regelanwendung: F(24) B(3) Parameter können in Bedingungen abgeprüft werden (logische Bedingungen mit Java-Syntax): A(x, y) (x >= 17 && y != 0) ==> ....
Beispiel:
Welche Struktur wird von folgendem L-System erzeugt? Axiom ==> [ RU(90) M(1) RU(90) A(1) ] A(1); A(n) ==> F(n) RU(90) A(n+1);
Welche Struktur wird von folgendem 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.
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 Elemente durch imperativen Code sm09_b08.rgg Verwendung eigener Module sm09_b21.rgg Seitenzweig-Positionierung
Hausaufgabe: Lesen Sie Chapter 1, Section 1.6 – 1.7 und 1.10/1.10.1 im Buch „The Algorithmic Beauty of Plants“ von P. Prusinkie-wicz und A. Lindenmayer (online verfügbar, siehe Literatur-seite zur Veranstaltung). (= S. 21-30 und 40-43).