Lindenmayer Systems with Turtle
Directly following from the previous assignment in my Computational Fabrication course, this post will outline my designs that were created using Lindenmayer Systems (L-systems).
A simple way to describe L-systems would be that they are a string of characters that change over time according to a set of rules. The initial string is called the “axiom,” and it also represents the initial iteration (\(n = 0\)). Every following iteration steps through each character in the previous iteration’s string, applying that character’s rule if it exists, and ignoring the character otherwise. These ignored characters are known as “constants” since they do not change over iterations. Here’s a trivial example with only one rule:
Rule:
- ‘F’ -> “F+F”
Axiom:
- “F-F”
Iteration | String |
---|---|
n = 0 | F-F |
n = 1 | F+F-F+F |
n = 2 | F+F+F+F-F+F+F+F |
At any iteration, we can choose to stop and use the string for other purposes. For computational design, we can assign each character in the vocabulary a certain action that the “turtle” can take. Generally, a “turtle” can be used to draw things programmatically in a computer window. We’ll go over more of the details in the following sections.
Materials
This time I used some 0.2 inch thick basswood that I picked up at the local hardware store. The width and height of the sheet was 6 x 24 inches. I was aiming for only cutting out two square designs, so the sheet allowed for four attempts. One attempt did go awry and I ended up using about 18 of the 24 inches of length.
Getting Familiar with Turtle
In computer programming, a “turtle” is an object that can move around the window and draw lines from its path. These lines can be used to form shapes, write text, or accomplish any computational drawing with simple move forward and rotate commands. This project makes use of the Processing library Turtle developed by Leah Buechley. As a first task, we’ll try to draw some basic things using the library.
Text
Here, I wrote a simple function to demonstrate drawing the letters “I” and “T” without drawing any section twice. This is accomplished using t.penUp()
and t.penDown()
, which stop or start drawing the turtle’s path for all subsequent commands, or until either method is called once again. The Turtle library also has the ability to store and retrieve the turtle’s info on the stack with t.push()
and t.pop()
. Keeping track of position, rotation, and whether the turtle is currently drawing allows for the turtle to reset to a previously pushed state when needed. I didn’t use these methods for the exercise, but I did implement them for the L-systems later on.
Processing Output
Code
Triangle
Here’s an example of a simple triangle. We can use t.goToPoint(x, y)
to direct the turtle to a specific location on the screen. Keep in mind, however, that if the pen state is still down then the turtle will draw a line from its previous location to the specified point.
Processing Output
Code
Pentagon
For shapes with more sides, we just need to remember that it takes 360 degrees to rotate around all vertices. Dividing 360 by the 5 sides of a pentagon give us 72 degrees, which indicates the angle that the turtle needs to turn at every vertex. Looping that 5 times results in a pentagon being formed.
Processing Output
Code
Circle
Here’s where things can get tricky. Since the turtle will always make discrete movements, it can’t exactly replicate the continuous curve of a circle. In light of the previous example with the pentagon, we can assume that adding more edges to the shape will cause it to look more circular. With enough edges, the difference between a circle and polygon become indistinguishable in a finite raster image. Using this concept, an arbitrary number of edges can be used to divide the total degrees of turning (360) in the circle. This gives the turning angle for the turtle at each vertex. Then, in order to input a radius for this function, we need to calculate the circumference and determine how far the turtle should move when drawing each edge. The equation for the circumference is \(C = 2 \pi r\). Divide this result by the number of edges to get the move distance per edge.
Processing Output
The first output uses only 20 sides, and the second uses 360. Observe how the second is a much smoother circle.
Code
L-System Code
Now we’ll dive into the important aspects of the L-system implementation. The starter code was provided for the assignment, and this section simply covers the implementation of the remaining features in the LSystem
class and the main Processing draw()
function.
-
iterate()
: Handles replacing the current iteration string of the L-system with the new iteration. -
drawLSystem(Turtle t)
: Takes the Turtle object and draws the current iteration string using mapped vocabulary. -
draw()
: Set to run only once withnoLoop()
. Calls the initializedLSystem
object’siterate()
function for as many times as the user has set the value ofnumIterations
.
L-System Results
Open System
Iteration Strings
Iteration | String |
---|---|
n = 0 | F-F-F-F-F-F |
n = 1 | [F—F+-]F++F-+F—F-[F—F+-]F++F-+F—F-[F—F+-]F++F-+F—F-[F—F+-]F++F-+F—F-[F—F+-]F++F-+F—F-[F—F+-]F++F-+F—F |
n = 2 | [[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F-[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F-[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F-[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F-[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F-[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F |
n = 3 | [[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F—[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F++[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F-+[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F—[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F-[[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F—[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F++[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F-+[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F—[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F-[[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F—[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F++[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F-+[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F—[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F-[[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F—[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F++[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F-+[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F—[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F-[[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F—[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F++[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F-+[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F—[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F-[[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F—[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F++[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F-+[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F—[[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F+-][F—F+-]F++F-+F—F++[F—F+-]F++F-+F—F-+[F—F+-]F++F-+F—F—[F—F+-]F++F-+F—F |
Iteration Outputs
Code
Eye
Iteration Strings
Iteration | String |
---|---|
n = 0 | F-F-F-F-F-F-F-F-F-F-F-F-F-F-F-F-F-F-F-F-F |
n = 1 | F–F+F+F–F-F–F+F+F–F-F–F+F+F–F-F–F+F+F–F-F–F+F+F–F-F–F+F+F–F-F–F+F+F–F-F–F+F+F–F-F–F+F+F–F-F–F+F+F–F-F–F+F+F–F-F–F+F+F–F-F–F+F+F–F-F–F+F+F–F-F–F+F+F–F-F–F+F+F–F-F–F+F+F–F-F–F+F+F–F-F–F+F+F–F-F–F+F+F–F-F–F+F+F–F |
n = 2 | F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F |
n = 3 | F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F-F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F–F–F+F+F–F–F–F+F+F–F+F–F+F+F–F+F–F+F+F–F–F–F+F+F–F |
Iteration Outputs
Code
Laser-Engraving Result
Isometric
Iteration Strings
Iteration | String |
---|---|
n = 0 | F-XF-F-XF-F-XF |
n = 1 | F-F-F-F++F-X[FXF]X-[-X-]-X[FXF]XF-F-F-F++F-F-F-F-F++F-X[FXF]X-[-X-]-X[FXF]XF-F-F-F++F-F-F-F-F++F-X[FXF]X-[-X-]-X[FXF]XF-F-F-F++ |
n = 2 | F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++ |
n = 3 | F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++]X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-F-F-F++F-[F-F-F-F++F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-F-F-F++F-]F-F-F-F++F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++]X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++]X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-F-F-F++F-[F-F-F-F++F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-F-F-F++F-]F-F-F-F++F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++]X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++]X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-F-F-F++F-[F-F-F-F++F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-F-F-F++F-]F-F-F-F++F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++]X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-[F-X[FXF]X-[-X-]-X[FXF]XF-]F-X[FXF]X-[-X-]-X[FXF]X[F-F-F-F++X[FXF]X-[-X-]-X[FXF]XF-F-F-F++]X[FXF]X-[-X-]-X[FXF]XF-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++F-F-F-F-F++++++ |
Iteration Outputs
Code
Laser-Engraving Result
Conclusion (and Problems Faced)
While I used L-systems in this project to produce mostly syymetrical, geometric designs, L-systems were originally concieved to explain the evolving structures of plants and trees. There are many ways to build rules and axioms that can generate organic structures like branches and leaves. I myself played a lot with some example L-systems that formed tree branches, but I could not find a result that was appealing enough to present here or engrave. Something that would be interesting to explore in the future would be the relation of L-systems to formal languages. It’s been a while since I’ve touched formal languages, but I imagine there are some interesting applications one could find in the intersection of the two.
I would like to make note of an issue I found with the laser cutting process. My isometric design ended up translating to Rhino in a slightly messed up fashion. Without significant experience in Rhino, I simply attempted the regular “Join” and “Group” operations, but there were still numerous layers of overlapping lines. My first attempt at etching despite the overlapping lines reuslted in some of the more heavily drawn sections being completely cut out of the wood. I then tried vastly increasing the speed and lowering the power so that multiple passes would not cut all the way through the thin slab.