Skip to content
Generate and draw L-systems
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
app
examples
img
src
test
.gitignore
.travis.yml
LICENSE
README.org
Setup.hs
package.yaml
stack.yaml

README.org

L-Systems

https://travis-ci.org/dlozeve/lsystems.svg?branch=master https://img.shields.io/badge/License-BSD%203--Clause-blue.svg

Generate and draw L-systems!

./img/demo.png

Check the accompanying blog post.

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

Tilings

Implementation

The program is implemented in Haskell, using Gloss to display the generated L-systems.

You can’t perform that action at this time.