Skip to content

dlozeve/lsystems

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

Generate and draw L-systems

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published