Entwickler-Ecke

Open Source Projekte - Generator, der fraktale Kurven und Pflanzen generiert


Fiete - So 25.05.08 15:15
Titel: Generator, der fraktale Kurven und Pflanzen generiert
Das Programm ermöglicht, Fraktale durch rekursive Definitionsgleichungen zu zeichnen und ist gleichzeitig ein anschauliches Beispiel für den Einsatz von formalen Grammatiken.

Mit Lindenmayergrammatiken lassen sich z.B. pflanzenähnliche Strukturen erzeugen.
L-System (Lindenmayer – System) - Aristid Lindenmayer (1925 - 1989, Dänemark)

Im Internet:
1) http://lernarchiv.bildung.hessen.de/sek_ii/mathematik/spezielle_themen/fraktale/edu_1196700565.html
2) http://www.natur-struktur.ch/fraktale/lindenmayer.html

In "The Fractal Geometry of Nature by Mandelbrot" wurde diese Idee besonders durch Adrian Mariano verwirklicht.
Eine Definitionsgleichung besteht aus einer Folge von Zeichen
der Menge <Sigma> = { F , G , + , - , | , [ , ] , / , \ , < , > ,! }
Dabei bedeutet:
F Zeichnen einer Linie
G Bewegen ohne Zeichnen der Linie
+ Drehung der Zeichenrichtung um einen Winkel nach oben
- Drehung der Zeichenrichtung um einen Winkel nach unten
| Drehung der Zeichenrichtung um 180°
! Vertauschen der Wirkung von +,- bzw. / und \
[ Speichern der aktuellen Zeichenposition (PUSH) Beginn eines neuen Astes
] Einstellen der zuletzt abgespeicherten Zeichenposition (POP) Ende eines Astes
/nn Drehung um nn Grad nach oben
\nn Drehung um nn Grad nach unten
<nn Multiplikation der Zeichenlänge mit Faktor nn/10
>nn Division der Zeichenlänge mit Faktor nn/10

Da die Definitionsgleichungen in der Form F = f(F,+,-,[,],/,\,<,>,|,! ) gegeben werden, entsteht eine rekursive Vorschrift. Eine höhere Rechentiefe bewirkt ein immer stärkeres Ausbilden der Fraktalform.

Die Festlegung des Drehwinkels erfolgt in ganzzahligen Werten, z.B. Winkel = 60°.
z.B.
Regelmenge R={S --> F--F--F, F --> F+F--F+F}, S ist Startregel
Dann ergibt sich:
Stufe 0 ergibt F--F--F
Stufe 1 ergibt F+F--F+F--F+F--F+F--F+F--F+F
Stufe 2 ergibt
Stufe 3 ergibt
erweitertes L-System

Die Definition eines Fraktals des L-Systems ist auch über die Festlegung eines Axioms (Startregel) und mehrerer Ersetzungsregeln möglich. Damit können noch interessantere Gebilde graphisch erzeugt werden.
Zum Beispiel definiert man ein Axiom in Abhängigkeit von F,G sowie X und Y und gibt Regeln für alle Größen an. Soll die nach Hilbert bezeichnete Kurve gezeichnet werden, setzt man:

Axiom Y
F = F
X = -YF+XFX+FY-
Y = +XF-YFY-FX+

Im Ergebnis erhält man die Hilbert-Kurve (Tiefe = 4, Winkel = 90°)

Betrachtet man die Kochkurve z.B. für 1 und 2 Iterationen, so stellt man fest, dass Teile der Kurve 2 durch lineare Verkleinerung um 1 : 3 aus der Kurve 1 hervorgehen, d.h. die Längen stehen im Verhältnis a / a‘ = 1 : 3. Anderseits müssen 4 Streckenzüge hinzugefügt werden, um aus Kurve 1 die Kurve 2 zu erhalten, d.h. die Flächeninhalte verhalten sich wie F / F‘ = 1 : 4. Nach der allgemeinen Definition der Dimension eines Gebildes (Fläche, Raum,...) erhält man
n = log(F‘/ F) : log(a‘/ a) = log 4 : log 3 = 1,261859...
und damit ein geometrisches Gebilde mit einer nicht ganzzahligen Dimension, eben ein Fraktal.

Im Menue Datei können Grammatiken geladen und gespeichert werden,
Zeichnungen können markiert (linke Maustaste) und in die Zwischenablage kopiert werden.
Über Neu können neue Regeln definiert werden, in der Planung solcher Regeln hat es sich als hilfreich herausgestellt, mit Papier und Bleistift die Stufen 0 und 1 sich zu überlegen.

Beim Programmstart werden aus den Ordnern Kurven-Definitionen--> L-Systeme bzw. --> L2-Systeme alle gespeicherten Definitionsdateien im Menue eingefügt.
Unter Option kann der erzeugte String angezeigt werden, der anschließend interpretiert wird.
Bei einer hohen Tiefe kann die Berechnung länger dauern, Abbruch mit <ESC>!

Viel Spaß beim Experimentieren
Fiete


alzaimar - Do 29.05.08 07:06

Zeichne die Linien dicker, je geringer die Rekursionstiefe ist, dann sieht das echter aus. Außerdem kannst Du die Länge und den Winkel etwas variieren, sowie per Random einen rekursiven Abstieg überspringen, dann werden die Pflanzen (natürlich) unregelmäßig.


Fiete - Di 03.06.08 19:30

Moin alzaimar,
danke für deine konstruktiven Vorschläge.

Mein Ziel war es mittels Grammatik-Definitionen Muster, auch pflanzenähnliche Gebilde, zu erzeugen.
Die Darstellung kann jeder nach seinem Geschmack ändern :wink:

Demnächst wird es ein Programm geben, das mit iterierten Funktionssystemen (IFS, Michael Barnsley) arbeitet.
Die Ergebnisse entsprechen mehr den natürlichen Formen.

Ein Profiprogramm für 3D-Objekte gibts hier:
http://www.softwarebox.de/seiten/greenworks/xfrog.htm

Gruß
Fiete


F34r0fTh3D4rk - Di 03.06.08 19:37

Wäre cool wenn du Stufe 3 aus deinem Post entfernen könntest, ist nämlich bissl breit geworden dadurch ;) Code Tags oder so etwas könnten auch Abhilfe schaffen ;)

mfg


Fiete - Do 05.06.08 12:33

Moin F34r0fTh3D4rk,
als Handballer bin ich von Natur aus breiter als andere :zwinker:
vielleicht gefällt es jetzt :wink:

Gruß
Fiete