app | ||
examples | ||
img | ||
src | ||
test | ||
.gitignore | ||
.travis.yml | ||
LICENSE | ||
package.yaml | ||
README.org | ||
Setup.hs | ||
stack.yaml |
L-Systems
https://travis-ci.org/dlozeve/lsystems.svg?branch=master
Generate and draw L-systems!
Introduction
This program can be used to generate arbitrary L-systems. It supports:
- full rewriting rules
- full representation rules
- personalized angle and segment length for the representation
- push ('[') and pop (']') operations
L-systems
LSystem
data type
An L-system consists of:
-
the L-system itself:
- an alphabet
- an axiom (i.e. the starting point)
- a set of rewriting rules (represented as a list of tuples)
-
rules to transform it into a graphical representation:
- an angle and a length
- a set of representation rules (which symbols mean "draw forward", "turn left", "pop a position", etc.)
JSON format for L-systems
L-systems can be specified using a straightforward JSON encoding. See
the examples/
folder for examples.
Note that the rules
and representation
keys are associated to
arrays of arrays in JSON. angle
and distance
are
numbers. Everything else should be a string.
Building and running
You will need Stack.
From the repository, run:
stack build
stack exec lsystems-exe -- examples/penroseP3.json
This will open a window, where you can move around using the mouse and zoom by scrolling.
For tests and documentation, run:
stack test --haddock
You can choose the L-system and the number of iteration via
command-line arguments, see the output of --help
:
lsystems -- Generate L-systems
Usage: lsystems-exe FILENAME [-n|--iterations N] [-c|--color R,G,B]
[-w|--white-background]
Generate and draw an L-system
Available options:
FILENAME JSON file specifying an L-system
-n,--iterations N Number of iterations (default: 5)
-c,--color R,G,B Foreground color RGBA
(0-255) (default: RGBA 1.0 1.0 1.0 1.0)
-w,--white-background Use a white background
-h,--help Show this help text
Examples
Examples are provided in the examples/
directory.
Space-filling curves
Fractals
- Lévy C curve
- Koch snowflake and Koch curve
- Sierpinski triangle and Sierpinski arrow curve
- Dragon curve
- Binary tree and fractal plant
Tilings
Implementation
The program is implemented in Haskell, using Gloss to display the generated L-systems.