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 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 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.