Generate and draw L-systems
Find a file
2018-01-17 17:35:20 +00:00
app Add option to list available L-systems 2018-01-17 17:35:20 +00:00
img Update README 2018-01-17 11:51:38 +00:00
src Add command line arguments (L-system and number of iterations) 2018-01-17 17:19:06 +00:00
test Add support for push ('[') and pop (']') operations 2018-01-17 10:54:44 +00:00
.gitignore Hide Emacs configuration files 2018-01-15 23:24:52 +00:00
.travis.yml Add Travis CI 2018-01-15 18:59:35 +00:00
LICENSE Initial commit 2018-01-15 18:47:54 +00:00
package.yaml Add command line arguments (L-system and number of iterations) 2018-01-17 17:19:06 +00:00
README.org Add option to list available L-systems 2018-01-17 17:35:20 +00:00
Setup.hs Initial commit 2018-01-15 18:47:54 +00:00
stack.yaml Initial commit 2018-01-15 18:47:54 +00:00

L-Systems

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

Generate and draw L-systems!

/dimitri/lsystems/media/commit/ac5a7467628291e490a6eef302164945e75e7551/img/demo.png

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

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

Building and running

You will need Stack.

From the repository, run:

stack build
stack exec lsystems-exe

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 [LSYSTEM] [-n|--iterations N] [-l|--list-lsystems]
  Generate and draw an L-system

Available options:
  LSYSTEM                  L-system to generate (default: penroseP3)
  -n,--iterations N        Number of iterations (default: 5)
  -l,--list-lsystems       List all available L-systems
  -h,--help                Show this help text

Examples provided

Space-filling curves

Fractals

Implementation

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