LSYSTEM(1) LSYSTEM(1) NAME lsystem - L system fractal generator SYNOPSIS lsystem [options] [file] DESCRIPTION lsystem is a fractal generator is based on the scheme devised by Aristid Lindenmayer (the L in Lsystem). It is a so-called string- rewriting system, in which an input string is altered according to a set of transform rules. The characters that make up the string, in turn, can represent commands to a "turtle" which will draw the actual fractal. More sophisticated Lsystem incarnations have been used to create very lifelike renderings of plants (see "The Algorithmic Beauty of Plants", written by Prusinkiewicz and Lindenmayer, published by Springer Verlag). Here's an example of a string-rewriting system. Consider the initial condition: b And the rules are: a = ab b = a Here are the results of 5 passes through the string-rewriting engine: b (initial) a ab aba abaab abaababa If "a" and "b" represented commands to a turtle-like drawing routine, the output string "abaababa" could be fed to it, and it would generate some type of figure. OPTIONS -o file Write output to file. -s Print string length info. -v Print version info. OPERATION lsystem reads an L system description from the specified file and writes drawing commands on the standard output (or a file, if specified with the -o option). These drawing commands should be piped through to convert them to the graphics driver of your choice. The drawing commands are generated in two phases: the string-rewriting phase, in which the initial string is iterated using a set of rules, and the string-interpretation phase, where the iterated string is passed to a `turtle' which substitutes macro definitions and executes drawing commands. INPUT FORMAT The input to lsystem consists of an initialization statement and several statements defining macros and rules. Blank lines are ignored, and anything from a # to end-of-line is a comment. The initialization statement has the format init <string> <iterations> <angle> where <string> is the initial string to be iterated, <iterations> is the number of iterations to perform, and <angle> is - 1 - Formatted: October 7, 2024 LSYSTEM(1) LSYSTEM(1) the angle through which the turtle turns when given the appropriate command. Strings in lsystem may consist of the letters A-Z (upper or lower case), +, -, [ and ]. Several of these have special meanings to the turtle, described later. MACROS Macros are useful to help simplify the design of fractals. They are only used during the string-interpretation phase, when the turtle is in operation. The format for defining a macro is <char> = <string> When the turtle is drawing, each occurrence of <char> is replaced (once only) by <string>. RULES Rules specify what replacements are done in the string in the iteration phase. In each iteration, rules are applied to the string in the order they were defined in the input. The format of a rule definition is <char> -> <string> Each instance of <char> in the string is replaced by <string>. TURTLE COMMANDS The turtle understands a limited set of commands. If it encounters a foreign character, it simply ignores it. This can be useful for building up complex strings. F Move turtle forward one step. A line is drawn. f Move turtle forward one step. No line is drawn. + Turn turtle clockwise by the angle increment. - Turn turtle anticlockwise by the angle increment. [ Stack turtle state. This includes position, heading and current colour (see COLOURS, below). ] Unstack turtle state. The state is restored to the matching [. No line is drawn if the turtle position changes. COLOURS You can change the colour of parts of the drawing (on those graphics devices which support colour) by setting characters to different colour values. In the string-interpretation phase, when the turtle sees a character, the current colour is set to its corresponding colour. If the character has no colour, no colour change is done. The format of a colour command is col <char> <red> <green> <blue> This sets <char> to have the specified RGB values. The RGB values are in the range [0-1]. RESTRICTIONS Complex rules and/or high iteration factors will take awhile to run through the lsystem engine. The string may become larger than - 2 - Formatted: October 7, 2024 LSYSTEM(1) LSYSTEM(1) available memory, too. Each pass through the lsystem engine can produce an exponential increment in the length of the string, so ANY amount of memory will be filled. FILES tab(@); l l . %%LIBDIR%%@Example L systems HISTORY This implementation of L systems is based on (and uses the same examples from) an Atari ST version written by Mark Kimball (1991). SEE ALSO AUTHOR Glenn Hutchings (zondo@hunting2.demon.co.uk) - 3 - Formatted: October 7, 2024