summaryrefslogtreecommitdiff
path: root/README.md
blob: f25b79ab8ac9a5ede2c9977a4c864244b4a8784a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
L-Systems.JS
============

A complete, 3D L-Systems implementation in JavaScript. Generates trees by
production rules and draws by converting to cartesian coordinates.

Usage
-----

```js
var lsys = new LSystem('F', { 'F' : 'F-F+FF' }).iterate(2);
var tree = lsys.print();
console.log(tree);  // F-F+FF-F-F+FF+F-F+FFF-F+FF
var coords = lsys.draw(Math.PI / 2);  // draw tree with alpha as 90 degrees
console.log(coords);  // [[0,0,0], [0,1,0], [1,1,0], ...
```

Definition
------

An L-system is a formal grammar defined as an initial axiom string, and a set
of production rules. In the aforementioned example, `F` is the initial axiom,
and only one production rule exists: `F -> F-F+FF`. The grammar alphabet is
assumed to be all characters with a production rule mapping.

Syntax
------

 - `F`: draw and move one unit vector forward
 - `+`/`-`: turn right / left
 - `&`/`^`: pitch up / down
 - `<`/`>`: roll right / left
 - `|`: reverse vector direction
 - `[`/`]`: push / pop current tree state

More
----

For more info and examples, check out http://yuvadm.github.com/lsys.js