Seite 1 von 3

Lindenmayer-System V3

Verfasst: 04.02.2005 22:22
von remi_meier
Version 3 ist da, siehe einige Posts weiter unten!

So da bin ich wieder :D
Und schon wieder ist es ein Programm um Fraktale zu berechnen (kommen vielleicht noch einige, da ich dieses Thema als Projektarbeit gewählt habe).
http://mypage.bluewin.ch/remimeier/zip/lsystem.zip
(Enthält Zip mit Exe und Source)
Zum Thema: http://astronomy.swin.edu.au/~pbourke/fractals/lsys/

Viel Spass noch
remi

EDIT:

Versucht z.B.:
Ersatzzeichen: X
Ersetzen durch: F-[[X]+X]+F[+FX]-X
Anfangszustand: X
Anz.Iterationen: 4
AngleInc: 22
LineLength: 20

oder:
Ersatzzeichen: F
Ersetzen durch: fF-F+[+[F-F-F]-[-F+F+F]]
Anfangszustand: F
Anz.Iterationen: 4
AngleInc: 32
Direct: 180
LineLength: 3.4

Verfasst: 04.02.2005 22:51
von Rob
Heh, das ist cool :allright:

Dein erstes Setting mit "Ersetzen durch" F+X+X+X+X+X+X-F-F-F-F-F sieht auch interessant aus...

Verfasst: 04.02.2005 23:02
von Lukaso
Wollte es mir gerade anschauen, nur der Link scheint tot zu sein :|

Verfasst: 04.02.2005 23:04
von remi_meier
Danke!
Übrigens ist im Programm drinn ein kleiner Lindenmayerinterpreter, der die "F+[f@]" als Zeichenoperationen ausführt. Er ist noch nicht ganz fertig, aber benutz werden können schon (in den Zeilen wo jetzt die F's und die +'s stehen):

Code: Alles auswählen

; Character        Meaning
; F         Move forward by line length drawing a line
; f         Move forward by line length without drawing a line
; +         Turn left by turning angle
; -         Turn right by turning angle
; |         Reverse direction (ie: Turn by 180 degrees)
; [         Push current drawing state onto stack
; ]         Pop current drawing state from the stack
; #         Increment the line width by line width increment
; !         Decrement the line width by line width increment
; @         Draw a dot with line width radius
; >         Multiply the line length by the line length scale factor
; <         Divide the line length by the line length scale factor
; &         Swap the Meaning of + And -
; (         Decrement turning angle by turning angle increment
; )         increment turning angle by turning angle increment
Dabei wird die Liniendicke auch noch nicht unterstützt (ich werde es bald einfügen).

@Lukaso: Also bei mir funktioniert der Link in Opera, Firefox und IE...

greetz
remi

Verfasst: 04.02.2005 23:28
von Lukaso
remi_meier hat geschrieben: @Lukaso: Also bei mir funktioniert der Link in Opera, Firefox und IE...
Komisch, kann den Server nichtmal anpingen -> "Zeitüberschreitung" .... da fällt mir ein ich konnte noch nix von mypage.bluewin.ch saugen :| Alles andere geht bestens :|

MFG Lukaso

Verfasst: 04.02.2005 23:36
von remi_meier
Hm.. komische Sache
Habs jetzt noch auf die Seite http://www.remimeier.8k.com/ (Link "Lindenmayer") hochgeladen, vielleicht gehts ja da.

Verfasst: 04.02.2005 23:53
von Lukaso
remi_meier hat geschrieben:Hm.. komische Sache
Habs jetzt noch auf die Seite http://www.remimeier.8k.com/ (Link "Lindenmayer") hochgeladen, vielleicht gehts ja da.
Super Danke, konnte es mir jetzt saugen :allright:

Echt geiles Tool, macht echt Spaß damit rumzuspielen :mrgreen:

MFG Lukaso :allright:

Verfasst: 05.02.2005 13:54
von remi_meier
Hab noch 2 Befehle hinzugefügt (s.o.).
Das grösste Problem ist jetzt die Liniendicke.
http://www.purearea.net/pb/CodeArchiv/G ... Defline.pb
Hier gibts zwar eine Funktion für sowas, jedoch ist die einfach totlangsam!
Wenn also jemand eine Idee hat, bitte sagen!

greetz
remi

EDIT:
Ok Liniendicke hab ich jetzt auch drin. Jetzt kämen noch Polygone, die werde ich jedoch mal lassen, nur wenn es jemand wünscht.
Befehle:

Code: Alles auswählen

; Character        Meaning
; F         Move forward by line length drawing a line
; f         Move forward by line length without drawing a line
; +         Turn left by turning angle
; -         Turn right by turning angle
; |         Reverse direction (ie: Turn by 180 degrees)
; [         Push current drawing state onto stack
; ]         Pop current drawing state from the stack
; #         Increment the line width by line width increment
; !         Decrement the line width by line width increment
; @         Draw a dot with line width radius
; >         Multiply the line length by the line length scale factor
; <         Divide the line length by the line length scale factor
; &         Swap the Meaning of + And -
; (         Decrement turning angle by turning angle increment
; )         increment turning angle by turning angle increment
Mit den neuen Möglichkeiten:
Ersatzzeichen: F
Ersetzen durch: F+[!-[!F-[!F]-F]+[!F+F]-F]
Anfangszustand: ######F+F
Anz.Iterationen: 3
AngleInc: 20
LineLength: 30.0

Verfasst: 05.03.2005 17:34
von remi_meier
Version 2
War viel Arbeit:
Die vollkommen erweiterte und erneuerte Version des Lindenmayer Programms! Die Befehle sind die selben, jedoch gibt es jetzt viele neue Möglichkeiten! Es ist jetzt möglich mehrere Regeln anzugeben, d.h. man kann noch komplexere Gebilde erzeugen!

Beispiel (in Datei kopieren und laden!):
268
354
20
180
10.000000
0.500000
9
10
Start: VZFFF
V : [+++W][---W]YV
W : +X[-W]Z
X : -W[+X]Z
Y : YZ
Z : [-FFF][+FFF]F

ACHTUNG: Das alte Dateiformat wird nicht mehr unterstützt!

Download im Showcase oder
http://mypage.bluewin.ch/remimeier/zip/lsystemv2.zip

cu
Remi :)

Verfasst: 04.05.2005 22:43
von remi_meier
Version 3
http://mypage.bluewin.ch/remimeier/zip/lsystemv3.zip

War wenig Arbeit:
Im Prinzip gleich wie Version 2.0, jedoch kann jetzt eingestellt werden, ob man vor dem Neuzeichnen/Berechnen einen Knopf (oder Hotkey F1) drücken muss, oder Realtime (V2). Ausserdem habe ich jetzt den String-Speicher-Voll-Fehler weggemacht, es wir jetzt alles dynamisch behandelt (meine MemoryStringFunktionen). Ev. ist es ein bisschen langsamer geworden. Das Berechnen kann jetzt (oft) abgebrochen werden :-) (Threads geht nicht und hab sonst auch keine bessere Lösung... Wenn jemand ne Idee hat..)

Viel Spass!
Remi :)


EDIT
Hab mich doch überwunden noch schnell was einzubauen -> Komfort