Autor Beitrag
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: So 28.06.15 10:19 
Hallo,
obwohl durch user profile iconFiete 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.
lsystem
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
Einloggen, um Attachments anzusehen!
_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein

Für diesen Beitrag haben gedankt: Fiete, OliviaTh
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: So 28.06.15 22:33 
Hoch lebe die sog. Turtle-Graphik, die irgenein frühes Turbopascal schon mal als Unit dabeihatte. Ich kann das Programm jetzt nicht testen, vermute aber, daß auch ihm Turtle-Befehle zugrundeliegen.

Was mich besonders interessiert: Wird die fraktale Dimension, die das Fraktal als Grenzwert (oder im Grenzfall?) annimmt (und woher diese geometrischen Gebilde ihren Namen haben) berechnet bzw. angezeigt /ausgegeben? Es sieht nicht so aus.

Für diesen Beitrag haben gedankt: Mathematiker
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Mo 29.06.15 06:23 
Hallo,
user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
vermute aber, daß auch ihm Turtle-Befehle zugrundeliegen.

Genau. Das L-System wird heute sehr gern mittels Turtle-Grafik umgesetzt.
user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
Was mich besonders interessiert: Wird die fraktale Dimension, die das Fraktal als Grenzwert (oder im Grenzfall?) annimmt

Die Idee ist gut. Allerdings gebe ich die fraktale Dimension (noch) nicht an. Ich werde mal sehen, was machbar ist.
Das Beste wäre ein Verfahren, das während der Zeichnung die Dimension automatisch bestimmt. Ob es so etwas gibt ? :nixweiss:

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein

Für diesen Beitrag haben gedankt: Delphi-Laie
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Mo 29.06.15 18:25 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Das Beste wäre ein Verfahren, das während der Zeichnung die Dimension automatisch bestimmt. Ob es so etwas gibt ? :nixweiss:


Ich weiß es genausowenig. Falls ja, wäre die Iterationstiefe sicher ausschlaggebend dafür.

Genaugenommen wird das Fraktal ja erst dann eines, wenn es bis zur Unendlichkeit getrieben wird. Bei allen endliche Rekursionstiefen ist es doch nichts anderes als eine - wie immer auch fein ziseliertes, aber dennoch endliches - geometrisches Gebilde.