Difference between revisions of "W2514 Emergence & Lindenmayer Systems (Part 4)"
Line 74: | Line 74: | ||
# Animate the entire production of the Lindenmayer System (not just from generation to generation, but the application of each production rule in sequence) | # Animate the entire production of the Lindenmayer System (not just from generation to generation, but the application of each production rule in sequence) | ||
{{KeyConcepts| | |||
* A '''Stack''' is an abstract data-type which is a collection of elements with two principal operations: | * 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 | ** '''Push''' adds the specified element to the collection | ||
** '''Pop''' removes and returns the ''most recently added'' element | ** '''Pop''' removes and returns the ''most recently added'' element | ||
* '''LIFO''' means '''L'''ast '''i'''n, '''f'''irst '''o'''ut | * '''LIFO''' means '''L'''ast '''i'''n, '''f'''irst '''o'''ut | ||
}} | |||
{{#set: Has primary media type=Text }} | {{#set: Has primary media type=Text }} |
Revision as of 21:04, 25 April 2021
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]
Modify the code from your previous experience.
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)
Regardless of what occurs between a push and a pop, the turtle will be in the same situation it was in immediately prior to the push. This enables us to build very complex systems.
👀 See Also[edit]
📺 Videos[edit]
Lindenmayer Systems and The Nature of Code
Procedural Plant Generation with L-Systems
📖 Texts[edit]
W2511 Emergence & Lindenmayer Systems (Part 1)
W2512 Emergence & Lindenmayer Systems (Part 2)
W2513 Emergence & Lindenmayer Systems (Part 3)
W2514 Emergence & Lindenmayer Systems (Part 4)
📚 References[edit]
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)
- 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 Last in, first out