Autor Beitrag
Fiete
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 617
Erhaltene Danke: 364

W7
Delphi 6 pro
BeitragVerfasst: So 25.05.08 15:15 
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) lernarchiv.bildung.h.../edu_1196700565.html
2) www.natur-struktur.c...ale/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
    F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F--
    F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F

Stufe 3 ergibt
    F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F+F+F--F+F+F+F--F+F--
    F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F+F+F--
    F+F+F+F--F+F--F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F--F+F--F+F+F+F--
    F+F+F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F--F+F--
    F+F+F+F--F+F+F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F--F+F--F+F+F+F--
    F+F--F+F--F+F+F+F--F+F+F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F--F+F--
    F+F+F+F--F+F--F+F--F+F+F+F--F+F+F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F

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
Einloggen, um Attachments anzusehen!
_________________
Fietes Gesetz: use your brain (THINK)


Zuletzt bearbeitet von Fiete am Do 05.06.08 12:28, insgesamt 1-mal bearbeitet
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: 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.

_________________
Na denn, dann. Bis dann, denn.
Fiete Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 617
Erhaltene Danke: 364

W7
Delphi 6 pro
BeitragVerfasst: 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:
www.softwarebox.de/s...greenworks/xfrog.htm

Gruß
Fiete

_________________
Fietes Gesetz: use your brain (THINK)
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 617
Erhaltene Danke: 364

W7
Delphi 6 pro
BeitragVerfasst: 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

_________________
Fietes Gesetz: use your brain (THINK)