# W2514 Emergence & Lindenmayer Systems (Part 4)

From Coder Merlin

## Prerequisites[edit]

## Research[edit]

- Read Stacks
- Review those Lindenmayer Systems that require use of a stack (pop/push). One example is a "Fractal Tree".

## Experiment[edit]

### Getting Started[edit]

Continue with the previous project.

Enter into the Sources directory of the project.

```
cd ~/projects/IgisShell-LSystems/Sources/IgisShell/
```

### First Steps[edit]

**Turtle** objects are able to remember their current state and restore that state at a later point. The state is stored on a stack and is therefore in *LIFO* (Last In First Out) order. A turtle's state includes:

- location
- angle
- pen color
- pen width

Consider a Fractal Tree with the following translation mechanisms:

**0**: draw a line segment (ending in a leaf)**1**: draw a line segment**[**: push position and angle, turn left 45 degrees**]**: pop position and angle, turn right 45 degrees

When encountering a push or pop operation we can use the turtle's functionality as follows:

```
case "[":
turtle.push()
turtle.left(degrees:45)
case "]":
turtle.pop()
turtle.right(degrees:45)
```

## Exercises[edit]

- Add a Fractal Tree as one of the Lindenmayer Systems in your cycle
- Add a Fractal Plant as one of the Lindenmayer Systems in your cycle
- Add "Kevs Wispy Tree" as one of the Lindenmayer Systems in your cycle

### Kevs Wispy Tree (Adapted)[edit]

- Alphabet: "F", "X", "[", "]", "+", "-", "0", "1", "2", "3"
- Axiom: "FX"
- Production Rules:
- "F" -> "0FF-[1-F+F]+[2+F-F]"
- "X" -> "0FF+[1+F]+[3-F]"

- Geometric mechanism:
- "F" -> Forward
- "X" -> Forward
- "-" -> Right 25 degrees
- "+" -> Left 25 degrees
- "[" -> Push
- "]" -> Pop
- "0" -> Pen color: red:140, green:80, blue:60
- "1" -> Pen color: red:24, green:180, blue:24
- "2" -> Pen color: red:48, green:220, blue:48
- "3" -> Pen color: red:64, green:255, blue:64

Note: Adapted from http://www.kevs3d.co.uk

## Supplemental Exercises[edit]

- Add buttons to alter the angles used in drawing the L-Systems
- Construct your own Lindenmayer System and add it to your cycle

## Bonus Exercises[edit]

- Animate the entire production of the Lindenmayer System (not just from generation to generation, but the application of each production rule in sequence)

## Key Concepts[edit]

- A
**Stack**is an abstract data-type which is a collection of elements with two principal operations:**Push**adds the specified element to the collection**Pop**removes and returns the*most recently added*element

**LIFO**means**L**ast**i**n,**f**irst**o**ut