
L-Systems Fractal Types

formulas: lsystem


These fractals are constructed from line segments using rules specified in
drawing commands. Starting with an initial string, the axiom,
transformation rules are applied a specified number of times, to produce
the final command string which is used to draw the image.

Like the type=formula fractals, this type requires a separate data file.
A sample file, fractint.l, is included with this distribution. When you
select type lsystem, the current lsystem file is read and you are asked
for the lsystem name you wish to run. Press <F6> at this point if you wish
to use a different lsystem file. After selecting an lsystem, you are asked
for one parameter - the "order", or number of times to execute all the
transformation rules. It is wise to start with small orders, because the
size of the substituted command string grows exponentially and it is very
easy to exceed your resolution. (Higher orders take longer to generate
too.)  The command line options "lname=" and "lfile=" can be used to over-
ride the default file name and lsystem name.

Each L-System entry in the file contains a specification of the angle, the
axiom, and the transformation rules. Each item must appear on its own
line and each line must be less than 160 characters long.

The statement "angle n" sets the angle to 360/n degrees; n must be an
integer greater than two and less than fifty.

"Axiom string" defines the axiom.

Transformation rules are specified as "a=string" and convert the single
character 'a' into "string."  If more than one rule is specified for a
single character all of the strings will be added together. This allows
specifying transformations longer than the 160 character limit.
Transformation rules may operate on any characters except space, tab or '}'.

Any information after a ; (semi-colon) on a line is treated as a comment.

Here is a sample lsystem:

Dragon {         ; Name of lsystem, '{' indicates start
  Angle 8        ; Specify the angle increment to 45 degrees
  Axiom FX       ; Starting character string
  F=             ; First rule:  Delete 'F'
  y=+FX--FY+     ; Change 'y' into  "+fx--fy+"
  x=-FX++FY-     ; Similar transformation on 'x'
}

The standard drawing commands are:
    F Draw forward
    G Move forward (without drawing)
    + Increase angle
    - Decrease angle
    | Try to turn 180 degrees. (If angle is odd, the turn
      will be the largest possible turn less than 180 degrees.)

These commands increment angle by the user specified angle value. They
should be used when possible because they are fast. If greater flexibility
is needed, use the following commands which keep a completely separate
angle pointer which is specified in degrees.

    D   Draw forward
    M   Move forward
    \nn Increase angle nn degrees
    /nn Decrease angle nn degrees

Color control:
    Cnn Select color nn
    <nn Increment color by nn
    >nn decrement color by nn

Advanced commands:
    !     Reverse directions (Switch meanings of +, - and \, /)
    @nnn  Multiply line segment size by nnn
          nnn may be a plain number, or may be preceded by
              I for inverse, or Q for square root.
              (e.g. @IQ2 divides size by the square root of 2)
    [     Push. Stores current angle and position on a stack
    ]     Pop. Return to location of last push

Other characters are perfectly legal in command strings. They are ignored
for drawing purposes, but can be used to achieve complex translations.

