/l-systems

Primary LanguagePythonMIT LicenseMIT

L-Systems

About L-Systems

An L-system consists of:

  • An alphabet of different strings (e.g. "F","+","-")
  • Rules that specify how "letters" in the alphabet are replaced with other strings (e.g. F -> F+F-F)
  • An axiom which is the starting string upon which the rules act in successive iterations (e.g. FF-F)

Turtle interpretation

In this program, we visualise the strings generated by subsequent iterations of the using turtle interpretation. The character F instructs the turtle to move forward by 1 unit, + rotates the turtle by X degrees and - by rotates by -X degrees. This draws the L-system from the string. Branches are denoted by brackets [] and can be included in the rules to generate shapes with branching structures.

Creating and Visualising a basic L-System

To visualise an L-system in this program:

  • Add a rule set and define at least one rule using the characters in this alphabet at least once "F","+","-","[","]". Other characters can be used too, but will not be interpreted by the turtle.
    • Rules contain a key and a value. During an iteration the value will replace the key.
  • Set the number of iterations to a desired number - start lower as L-systems can very quickly become too large to compute in a reasonable timeframe.
  • Define the branching angle X.
  • Define the axiom.
  • Select the rule set and the axiom and press generate.

Creating a context sensitive L-System

Context sensitivity is where the string that replaces a "letter" depends on the surrounding letters. It is therefore a property of the rules of an L-system. To specify context sensitive rules, enter the rule key in this format "left-context<X>right-context". This will replace the letter X with the associated rule value only when X has left-context to the left and right-context to the right in the string. E.g. for the alphabet "F1","F0","+","-","[","]", the rule F0<F1>F0 -> +[F1F1]-F means F1 is replaced by +[F1F1]-F only when F0 is to the left and F1 is to the right.