3d Lindenmayer Systems |
Accesses since 2. Oct. 2003 |
last Update: 12. Aug. 2007 |
The
Lindenmayer System language also known as L-Systems was
defined by Aristid Lindenmayer in the book 'The Algorithmic Beauty of Plants, Springer Verlag'. Text on the back cover: "This book is for * Computer graphics professionals * Biologists, * Theoretical computer scientists and mathematicians who will discover that the mathematical beautiful theory of L-Systems has important practical applications * Individuals interested in fractals, L-Systems and Artifical Life". |
Aristid Lindenmayer (1925-1989) |
To load and save such
definitions from a text file, I use a notation
which is an extention to the Virtual Reality Modeling Language (see
Extensibility of VRML
1.0 Specification or VRML
1.0c Specification). You can see the syntax extension on the right side. After the property name definition included by '[...]' the default values are defined. name should have no blancs included. info is an optional information text limited to 80 characters. link is an optional hone page reference. angle defines how many degrees the 3d turtle should turn. step defines the step length you go on commands like F, f, G or g. segments defines the number of cylinder planes which will be draw instead of lines, if the thickness is greater than 1.0. thickness defines the diameter of the cylinder for one turtle step. factor defines a multiplication value per deep step for resizing the whole drawing figure. deep defines the number of recursions until the replacement of the rule characters stops. colors defines an optional color array that defines the color palette to use. The axiom defines the starting rule for the LSystem interpreter. The rules defines the replacement statements. |
LSystem Definition Syntax and
default values:LSystem |
If you want to create your own Lindenmayer Systems figures or if you
only want to play around
with the predefined LSystem definitions than download
my new The visualization uses the 3d-Engine FliSp3d. Therefore many parameters can be changed interactivly, e.g. the background picture or the transparency of lines, planes and sprites. Get more information about FliSp at this link. Note: Now you can save a lindenmayer system as text file and you can load LSystem files which may contain a collection of many LSystem definitions. Statements '(' and ')' for defining values are still not implemented at the moment. Sorry - but ... I am working on this features. |
|
LSystem
selection To select a predefined LSystem figur press right mouse button on main screen and choose a figure with the menu command 'Select figure / ...'. Loading and Saving LSystem collection files On Tab Select you can load and save LSystem text files, which can have one or more LSystem definitions pressing Load File... or Save File ... button. Displayed files can be loaded again easily by pressing button Load Again e.g. after corrections of the LSystem file done with a text editor. If you want to load all LSystem file of a directory press Load All (v1.04). After selecting a LSystem item of a predefined or a loaded LSystem collection, you can view it by pressing button View or with a double click to it. Pressing button Edit will copy all parameters to the edit fields and change to tab Edit for further changes. |
|
How to edit LSystems
with LinSy3d The dialog for editing LSystems will be automatically opened at program start. You can open this dialog also by the menu command 'Edit / Lindenmayer Systems... Ctrl-F8' Select Tab Edit and press button Get to get all parameters of the actual displayed LSystem. If you want see the effect of changed parameters, press the Set button. If you want to see changes immediately, turn on link drawing. You can easily copy the whole parameters to e.g. a text file with the Lindenmayer text file (*.lsy) syntax if you press the Copy button and paste the copied text there. The Save... button will start the file saving dialog to save the LSystem as a *.lsy text file with a single LSystem definition. |
|
LSystem |
|
LSystem |
|
LSystem |
|
LSystem |
LSystem |
|
LSystem |
|
LSystem |
|
LSystem { name GaliumOdoratum |
Normally all L-systems plants
generated by the same L-System are identical, while in reality there is
no plant in the world growing in the same way. Simulating natural process by using probability is a much simpler approach than underlying natural rules. In my new L-System-Interpreter 1.3 you have the possibility to create stochastic L-Systems. You can define more than one rules for only one symbol. If there are more than one rule the LS-Interpreter will choose one of them randomly. If you generate many virtual plants in a garden, all plants will have different appearance though they are based on the same stochastic L-system definition. As you can see in the example it is a great approximation to nature scene (for example see file Stochastic1.LSY). LSystem |
character |
default |
statement |
Befehl (german) |
F |
step |
draw forward |
zeichne vorwärts |
f |
step |
jump forward |
springe vorwärts |
+ |
angle |
turn left |
nach links drehen |
- |
angle |
turn right |
nach rechts drehen |
& |
angle |
pitch down |
nach unten drehen |
^ |
angle |
pitch up |
nach oben drehen |
\ |
angle |
roll left (anticlockwise) |
nach links neigen (gegen Uhrzeigersinn) |
/ |
angle |
roll right (clockwise) |
nach rechts neigen (im Uhrzeigersinn) |
| |
180° |
turn around 180° |
um 180° umdrehen |
_ | 180° |
roll 180° |
um 180° verdrehen (Kopfstand) |
G |
step |
draw forward |
zeichne vorwärts in der Fläche ? |
g |
step |
jump forward |
springe vorwärts |
{ |
begin plane |
neue Fläche |
|
} |
end plane |
Fläche beenden |
|
. |
add plane point |
Flächenpunkt hinzufügen |
|
[ |
start branch |
beginne neuen Zweig |
|
] |
complete branch |
beende Zweig |
|
' |
+1 |
increment color index |
Farbindex erhöhen |
! |
-1 |
decrement diameter |
Durchmesser verringern |
? |
0.8 |
multiply diameter |
Durchmesser multiplizieren |
# |
start line comment |
Beginn Zeilenkommentar |
|
* |
jump to origin |
zum Koordinatenursprung springen | |
~ |
add shape (see predefined shapes) |
Figur hinzufügen (siehe
Figurentabelle) |
|
> |
increment
(see increment / decrement) |
erhöhen |
|
< |
decrement
(see increment / decrement) |
ernidrigen |
|
$ |
extended
command (see extended commands) |
Zusatzkommando |
|
= |
assignment seperator |
Zuweisungstrennzeichen |
|
<number> |
1 |
repetition / multiplication factor example '6+' means '++++++' |
Wiederholungs- bzw. Multiplikationsfaktor Beispiel: '5?' bedeutet '?????' |
Predefined Shapes:
characters |
default |
statement |
Befehl |
~ |
add shape |
Figur hinzufügen |
|
~c |
s = step / 2 |
add small cube |
kleinen Würfel hinzufügen |
~C |
s = step |
add cube |
Würfel hinzufügen |
~d |
d = step / 2 |
add small disc | Scheibe hinzufügen |
~D |
d = step |
add disc | Scheibe hinzufügen |
~e |
d = step, h=step/2 |
add flat ellipsoid |
flaches Ellipsoid hinzufügen |
~E |
d = step/2, h=step |
add long ellipsoid | längliches Ellipsoid hinzufügen |
~l |
d = step/2 |
add small flower | Blüte hinzufügen |
~L |
d = step | add flower | Blüte hinzufügen |
~o |
d = step |
add small cone | kleinen Kegel hinzufügen |
~O |
d = step |
add cone | Kegel hinzufügen |
~s |
d = step / 2 |
add small sphere |
kleine Kugel hinzufügen |
~S |
d = step |
add sphere |
Kugel hinzufügen |
~x |
d = step / 2, h=step |
add small cone stump | kleinen Kegelstump hinzufügen |
~X |
d = step, h=step |
add cone stump | Kegelstump hinzufügen |
~y |
d = step / 2, h=step/2 |
add small cylinder | kleinen Zylinder hinzufügen |
~Y |
d = step |
add cylinder | großen Zylinder hinzufügen |
~1 |
d = step |
add sprite 1 |
Sprite Nr.1 hinzufügen |
~2 |
d = step |
add sprite 2 |
Sprite Nr.2 hinzufügen |
~3 |
d = step |
add sprite 3 |
Sprite Nr.3 hinzufügen |
~4 |
d = step |
add sprite 4 |
Billboard-Sprite Nr.4 hinzufügen |
Increment / Decrement Commands:
decrement |
increment |
statement |
Befehl |
< |
> |
decrement ... / increment ... | erniedrigen ...
/ erhöhen... |
<a | >a | angle - 1° / angle + 1° | Winkel - 1° / Winkel + 1° |
<A | >A | angle * 0.9 /
angle * 1.1 |
Winkel * 0.9 /
Winkel * 1.1 |
<s
|
>s |
step - 1
/ step + 1 |
Schrittweite -
1 / Schrittweite +1 |
<S |
>S |
step *
0.9 / step * 1.1 |
Schrittweite *
0.9 / Schrittweite * 1.1 |
<t |
>t |
thickness -
1 / thickness + 1 |
Dicke - 1
/ Dicke + 1 |
<T |
>T |
thickness *
0.9 / thickness * 1.1 |
Dicke *
0.9 / Dicke * 1.1 |
<c |
>c |
color index -
1 / color index + 1 |
Farbindex -
1 / Farbindex + 1 |
<r |
>r |
tropism -
1 / tropism + 1 |
Anziehung -
1 / Anziehung + 1 |
Extented Commands
characters | default |
statement |
Befehl |
$F |
step
/ 2 |
draw forward half step | zeichne
halben Schritt nach vor |
$f |
step / 2 | jump forward half step | halben
Schritt nach vor springen |
$G |
step / 2 | draw forward half step without planepoint | zeichne
halben Schritt nach vor ohne einen Flächenpunkt hinzuzufügen |
$g |
step / 2 | jump
forward half step without planepoint |
halben
Schritt nach vor springen ohne einen Flächenpunkt hinzuzufügen |
$U | thick
/ 2 |
jump up thickness radius | um Dickenradius nach unten springen |
$D | thick / 2 | jump down thickness radius | um Dickenradius nach oben springen |
$R |
thick / 2 | jump
right thickness radius |
um
Dickenradius nach rechts springen |
$L |
thick / 2 | jump
left thickness radius |
um Dickenradius nach links springen |
$| |
180° |
turn
around 180° horizontal |
um
180° umdrehen |
$_ |
180° |
roll
180° |
um
180° verdrehen (Kopfstand) |
$& |
v=-90° |
pitch
down to vertical |
vertikal
nach unten drehen |
$h |
h=0° |
roll
to horizontal |
horizontal
ausrichten |
$* |
jump
to origin |
zum
Ausgangspunkt zurückspringen |
name | version date |
OS
/ source requirements |
author
link |
3D L-Systems
|
? 2001 |
Windows
/ C++ Direct3D |
3d
LSystem Application by J. Scott Cameron The College of Wooster http://www.alesdar.org/oldSite/IS/chap4-4.html |
BioSchematics |
0.4.6 7/2005 |
Linux
/ C OpenGL / Guile 1.6 |
3d
L-System interpreter by Xavier Raynaud http://bioschematics.tuxfamily.org/ |
Lindenmayer Fraktale |
2.2 11/2003 |
Windows
/ (Delphi4) --- |
2d
LSystem-Application by Ulrich Schwebinghaus http://www.fraktalwelt.de/myhome/lmayer.htm |
Lindenmayer II |
? 2005 |
Web-Browser
/ Java JRE |
interactive
2d LSystem-Applet by Ulrich
Schwebinghaus http://www.fraktalwelt.de/myhome/lmayer2-g.htm#applet |
LParser2 |
1.0 1/2005 |
Windows
(DOS) / --- Browser VRML-Plugin |
3d
LSystems Generator for WRL files by Laurens Lapré http://home.wanadoo.nl/laurens.lapre |
L-Studio
4 |
4.0.5 2005 |
Windows
95/NT or later (Microsoft Visual C++ v.6.0) OpenGL |
3d
LSystem Application by Radoslaw Karwowski & Brendan Lane Department of Computer Science, University of Calgary http://algorithmicbotany.org/lstudio/ |
LSYS32 |
6/1998 |
Windows / --- |
graphical
shell for for Laurens Lapre's Lindenmayer system parser http://chris.lichti.org/Lab/LSys32/LSys32.shtml |
LSE
L-System Explorer |
1.1 9/2002 |
Windows
/ C++ --- |
2d
LSystem-Application by James Matthews http://www.generation5.org/content/2002/lse.asp |
L-Systems Plant Geometry Generator |
? 1999 |
Macintosh
/ --- ? |
2d
LSystem-Application by Bryan
Horling http://shakti.trincoll.edu/~bhorling/lsystems/ |
L-Systems
Applet |
1.0 ? |
Web-Browser
/ Java JRE |
interactive
2d LSystem-Applet by Robert Jessop http://home.clara.net/niknak/fractal/ |
L-System 4 |
4.01 7/2000 |
Windows
/ --- --- |
3d
LSystem Application by Timothy C. Perz http://geocities.datacellar.net/tperz/L4Home.htm |
Virtual
Plants |
1.0 12/1999 |
Web-Browser
/ Java JRE 1.2, Java3d |
3d
LSystem Application by Rene Gressly University of Applied Sciences, Biel, Switzerland http://www.hta-bi.bfh.ch/~swc/DemoJ3D/VirtualPlants/ |