Hallo,
obwohl durch
Fiete vor einiger Zeit schon eine sehr schöne Lösung zum
L-System hier gegeben wurde, zeige ich meine Lösung heute auch.
Das nachfolgende Programm mit Quelltext ist eine "Auskopplung" aus meinem
Matheprogramm, d.h. ein weiterer, kleiner Teil ist damit als Open Source verfügbar.
Das Programm zeichnet fraktale Kurven mit dem L-System.
1968 entwickelte Aristid Lindenmayer sogenannte kontextfreie Chomsky-Grammatiken zum L-System weiter. In "The Fractal Geometry of Nature by Mandelbrot" wurden diese besonders durch Adrian Mariano verwirklicht.
Eine Definitionsgleichung besteht aus einer Folge von Zeichen der Menge, die Syntax wurde mit Hilfe der Turtle-Grafik von S. Papert interpretiert. Dabei bedeutet:
F Zeichnen einer Linie
G Bewegen ohne Zeichnen der Linie
H Zeichnen einer Linie (äquivalent zu F)
X, Y, L, R, A, B Variablen zur Beschreibung komplexerer L-Systeme
+ Drehung der Zeichenrichtung um einen Winkel nach oben
- Drehung der Zeichenrichtung um einen Winkel nach unten
/nn Drehung der Zeichenrichtung um den Winkel nn in Grad nach oben; nn kann als rationale Zahl mit Dezimalpunkt eingegeben werden
\nn Drehung der Zeichenrichtung um den Winkel nn in Grad nach unten; nn kann als rationale Zahl mit Dezimalpunkt eingegeben werden
<nn die Zeichenlänge wird mit dem Faktor nn/10 multipliziert
>nn die Zeichenlänge wird mit dem Faktor nn/10 dividiert
@xx die Zeichenlänge wird mit der Zahl xx multipliziert; nn kann als rationale Zahl mit Dezimalpunkt eingegeben werden
@Ixx die Zeichenlänge wird mit der Zahl xx dividiert; nn kann als rationale Zahl mit Dezimalpunkt (genau 2 Ziffern) eingegeben werden
| Drehung der Zeichenrichtung um 180°
! Vertauschen der Wirkung von +,- bzw. / und \
[ Speichern der aktuellen Zeichenposition (PUSH)
] Einstellen der zuletzt abgespeicherten Zeichenposition (POP)
C Änderung der Zeichenfarbe
Der Faktor nn bei den Befehlen < und > kann zwischen 01 (Faktor 0.1) und 99 (Faktor 9.9) liegen. Zur Vermeidung von numerischen Problemen ist aber bei großen Faktoren Vorsicht geboten.
Da die Definitionsgleichungen in der einfachsten Form
F = f(F, G, +, -, [, ], /, \, <, >, |, !)
gegeben werden, entsteht eine rekursive Vorschrift. Eine höhere Anzahl von Iterationen bewirkt ein immer stärkeres Ausbilden der typischen Fraktalform. Die Festlegung des Drehwinkels erfolgt in ganzzahligen Anteilen des Vollwinkels, d.h., Winkel 6 bewirkt jeweils eine Drehung um 60 Grad. Im Programm ist die Anzahl der Iterationen auf den Bereich von 1 bis 10 beschränkt.
Ein Fraktal des L-Systems wird in diesem Programm im Darstellungsfenster stets so gezeichnet, dass es die volle Größe des Fensters nutzt, d.h. unabhängig von einem Koordinatensystem. Auf Wunsch kann man auch 4 aufeinanderfolgende Iterationsstufen zeichnen lassen.
Viel Spaß beim Testen
Mathematiker
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein