L-Systems: "Stringing Along"
- Joelle McDonald

- Feb 21, 2025
- 11 min read

This assignment uses Turtle to explore the creation of L-Systems. I begin with a review of Turtle functions before finishing a skeleton code provided to me to create my first working L-System. After checking that code is working against an example, I go on to create three unique designs of my own. I then laser cut two of those designs before delving into adding randomization and probabilistic rule applications to my L-System designs.
Task One: Using Turtle in Processing
In this task I am creating a few basic shapes using commands from the Turtle library. The intention is to prevent doubling lines by using the "t.goToPoint" command in combination with "t.penUp" and "t.penDown". Click the arrow next to each challenge name to see my code and an image of the output.
First Challenge: Drawing Capital Letters "I" and "L"

import Turtle.*;//import turtle library
import processing.pdf.*;//import library to enable pdf saving
Turtle t;
void setup() {
size(600,300, PDF, "L1_Task1_Part1.pdf"); //set size of field, run as pdf export
background(255); //set background to white
stroke(0); //set stroke to black
t = new Turtle(this);
noLoop(); //run draw loop only once
}
void draw(){
//code to draw the capital "I"
t.penUp(); //pause drawing
t.goToPoint(150, 200); //go to bottom center of "I" space
t.penDown(); //resume drawing
t.forward(100); //draw upward line of "I"
t.penUp(); //pause drawing
t.goToPoint(100, 100); //go to top left of "I"
t.right(90); //turn toward right of screen
t.penDown(); //resume drawing
t.forward(100); //draw top horizonal line of "I"
t.penUp(); //pause drawing
t.goToPoint(100, 200); //go to bottom left of "I"
t.penDown(); //resume drawing
t.forward(100); //draw bottom horizonal line of "I"
//code to draw the capital "L"
t.penUp(); //pause drawing
t.goToPoint(400, 100); //go to top of "L" space
t.right(90); //turn toward bottom on screen
t.penDown(); //resume drawing
t.forward(100); //draw downward line of "L"
t.left(90); //turn toward right of screen
t.forward(75); //draw bottom line of "L"
//code to finish program
println("Finished."); //signal all code has run and pdf exported
exit(); //end the program
}Second Challenge: Triangle

import Turtle.*;//import turtle library
import processing.pdf.*;//import library to enable pdf saving
Turtle t;
void setup() {
size(250,250, PDF, "L1_Task1_Part2.pdf"); //set size of field, run as pdf export
background(0); //set background to white
stroke(255); //set stroke to black
t = new Turtle(this);
noLoop(); //run draw loop only once
}
void draw(){
t.penUp(); //pause drawing
t.goToPoint(75,175); //go to bottom left point of triangle to start
t.right(30); //adjust angle for first line
t.penDown(); //resume drawing
t.forward(100); //draw first side of triangle
t.right(120); //adjust angle for next line
t.forward(100); //draw second side of triangle
t.right(120); //adjust angle for next line
t.forward(100); //draw last side of triangle
//code to finish program
println("Finished."); //signal all code has run and pdf exported
exit(); //end the program
}Third Challenge: Pentagon

import Turtle.*;//import turtle library
import processing.pdf.*;//import library to enable pdf saving
Turtle t;
void setup() {
size(100,100, PDF, "L1_Task1_Part3.pdf"); //set size, run as pdf export
background(0); //set background to black
stroke(255); //set stroke to white
t = new Turtle(this);
noLoop(); //run draw loop only once
}
void draw(){
t.penUp(); //pause drawing
t.goToPoint(20, 95); //go to bottom left corner of pentagon
t.penDown(); //resume drawing
t.left(18); //turn toward initial angle
t.forward(60); //draw first side
t.right(72); //re-angle for next line
t.forward(60); //draw secind side
t.right(72);//re-angle for next line
t.forward(60); //draw third side
t.right(72);//re-angle for next line
t.forward(60); //draw fourth side
t.right(72);//re-angle for next line
t.forward(60); //draw fifth side
//finish program
println("Finished."); //signal all code has run and pdf exported
exit(); //end the program
}Fourth Challenge: Circle

import Turtle.*;//import turtle library
import processing.pdf.*;//import library to enable pdf saving
Turtle t;
void setup() {
size(180,180, PDF, "L1_Task1_Part4.pdf"); //set size, run as pdf export
background(0); //set background to black
stroke(255); //set stroke to white
t = new Turtle(this);
noLoop(); //run draw loop only once
}
void draw(){
t.penUp(); //pause drawing
t.goToPoint(35, 90); //go to bottom left corner of pentagon
t.penDown(); //resume drawing
for (int i=0; i<360; i+=1){ //loop to run program 360 times
t.forward(1); //move turtle forward one unit
t.right(1); //rotate turtle one degree to the right
}
println("Finished."); //signal all code has run and pdf exported
exit(); //end the program
}A Note on Tasks Two and Three
Throughout sections two and three of this documentation, I will include snippets of code for you to understand the core functions setting the associated L-System. These code snippets, while a good overall picture, are not enough to try my designs yourself. To see the full code associated with this assignment, please visit this gitHub link. This will allow you to see the context in which each L-System is operating. I have commented out the code that initializes each L-System in the draw() function so that you may uncomment one system at a time to test them. There are also goToPoint funtions in draw() for designs 1 and 3 to uncomment before running.
Task Two: Implementing the L-System Framework
In this section, I will be using an existing set of code provided to me in class, which is not fully functional. I will be adding in the missing functionality needed for the L-System to be fully operational, checking my work against an example L-System. The image and table below shows what my code generated, which matches that of the example. This means my code is fully functional.

Task Two Code
To see the full code associated with this assignment, please visit this gitHub link.
Production Rules for Variables and Constants Code
LSystem initSquare() {
// initialize turtle variables
float moveDist = 10;
float rotateAngle = 90;
float scaleFactor = 1;
// The intial axiom / input string
String axiom = "F+F+F+F";
// Create any production rules
HashMap<Character, String> rules = new HashMap<>();
rules.put('F', "F+F-F-FF+F+F-F");
// Create and return the Lsystem
return new LSystem(axiom, rules, moveDist, rotateAngle, scaleFactor);
}Iterate Method Code
// runs 1 iteration, performing the rules for each character
// on the current string. The result of the replacement is added to the //currentIterationBuffer.
public void iterate() {
// get a copy of the current iteration string
String current = this.getIterationString();
// Now clear the current interation string
this.clearCurrentStringBuffer();
// [TODO]: Implement the procedure for using the rules to replace characters in
//the current string, and append them them to the currentIterationBuffer
// Iterate through each character in currentString
for (char c : current.toCharArray()) {
if (rules.containsKey(c)) {
currentIterationBuffer.append(rules.get(c)); // Apply hashmap rules
} else {
currentIterationBuffer.append(c); // Keep constants constant
}
}
// Increment our iteration after we are done
iterationNum += 1;
}Implementing drawLSystem method Code
// This function uses the turtle to draw based on each character in the LSystem's
// iteration string. It also handles scaling the moveDistance (to keep the image in frame), if desired
public void drawLSystem(Turtle t) {
// Our turtle's move distance
float dist = this.moveDistance;
float angle = this.rotateAngle;
float leafSize = random(10, 40);
// Scale the movement, if necessary, to help keep the image in frame
// when it gets too big
if (scaleFactor != 0) {
// Get the current iteration number for scaling
int iterationNum = this.getIterationNum();
dist = dist / (scaleFactor * (iterationNum + 1));
}
// Get the current iteration string
String currentIteration = this.getIterationString();
// [TODO]: Loop through each character in the iteration string,
// and do turtle operations based on the character
for (int i = 0; i < currentIteration.length(); i++) {
Character c = currentIteration.charAt(i);
// [TODO]: Implement different l-system vocabulary
// [TODO]: Implement operations for each l-system vocabulary
switch (c) {
case 'F':
t.forward(dist);
break; // exits out of the switch statement, prevent next cases running
case '+':
t.left(angle);
break;
case '-':
t.right(angle);
break;
case 'B':
t.back(dist);
break;
case '[':
t.push();
break;
case ']':
t.pop();
break;
case 'L':
t.left(angle);
t.forward(leafSize);
t.right(angle);
t.forward(leafSize);
t.right(180-angle);
t.forward(leafSize);
t.right(angle);
t.forward(leafSize);
break;
case 'C':
for (int k=0; k<360; k+=1){ //loop to run program 360 times
t.forward(.1); //move turtle forward one unit
t.right(1); //rotate turtle one degree to the right
}
break;
default:
// Throw an error if we don't have a draw operation implemented
throw new IllegalArgumentException("Missing a drawing operation case for
character: " + c.toString());
}
}
}Applying numIterations to L-System Code
// [TODO]: Iterate (simulate) the LSystem for numIterations using its iterate()
//function
for (int i=0; i<numIterations; i+=1){
lSys.iterate();
}Task Three: Create a Unique L-System Design
Now that I have functioning L-System code and I have replicated an example, it is time to be creative and come up with some unique L-Systems of my own! I have created three designs, the details of which are below. In part four I will fabricate two of the designs I create in this task.
L-System Design 1: Wreath

L-System Definition Table 1: Wreath
Vocabulary | “F”, “+”, “-”, “B”, “[“, “]” |
|---|---|
Variables | “F”, “B” |
Constants | “+”, “-”, “[“, “]” |
Rules | (“F” → “B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F”) (“B” → “[F+]++F-F[F+]++F-F[F+]++F-F”) |
Axiom | “+B+[F--B]F” |
Move Distance | 20 |
Angle | 12 |
Scale Factor | 0.2 |
Drawing | “F” means "move forward by move distance" “+” means "turn left by angle” “-” means "turn right by angle" “B” means "move backward by move distance". “[“ means “push”. “]” means “pop”. |
Wreath Design L-System Code
This is the code snippet for the L System design that utlizes the code written for the L-System Class that I completed in task two.
To see the full code associated with this assignment, please visit this gitHub link.
// TASK THREE, DESIGN 1: wreath design l-system
LSystem initDesignOne(){
// initialize turtle variables
float moveDist = 20;
float rotateAngle = 12;
float scaleFactor = 0.2;
// The intial axiom / input string
String axiom = "+B+[F--B]F";
// Create any production rules
HashMap<Character, String> rules = new HashMap<>();
rules.put('F', "B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F");
rules.put('B', "[F+]++F-F[F+]++F-F[F+]++F-F");
// Create and return the Lsystem
return new LSystem(axiom, rules, moveDist, rotateAngle, scaleFactor);
}Wreath Design String Output Table
This output table shows what the axiom string became after each iteration of the L-System code. Please see the table above for definitions of each character within the string.
Iteration (n) | Output String |
n = 0 (axiom) | +B+[F--B]F |
n = 1 | +[F+]++F-F[F+]++F-F[F+]++F-F+[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F--[F+]++F-F[F+]++F-F[F+]++F-F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F |
n = 2 | +[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+[[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F--[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F][F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F |
n = 3 | +[[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+[[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F][F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F][F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F][F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F--[[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F][B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F][F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F][F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+]++B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F][F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F[F+]++F-F[F+]++F-F[F+]++F-F[B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F+-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F-B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F]B[F+-F-F]FB[F+-F-F]FB[F+-F-F]F |
L-System Design 2: Turning Triangle

L-System Definition Table 2: Turning Triangle
Vocabulary | “F”, “+”, “-”, “B”, “[“, “]” |
|---|---|
Variables | “F”, “B” |
Constants | “+”, “-”, “[“, “]” |
Rules | (“F” → “[F+F+F]-B-B-B[F+F+F]-B-B-B”) (“B” → “+B++B+”) |
Axiom | “F+F+F” |
Move Distance | 100 |
Angle | 120 |
Scale Factor | 1 |
Drawing | “F” means "move forward by move distance" “+” means "turn left by angle” “-” means "turn right by angle" “B” means "move backward by move distance". “[“ means “push”. “]” means “pop”. |
Turning Triangle L-System Code
This is the code snippet for the L System design that utlizes the code written for the L-System Class that I completed in task two.
To see the full code associated with this assignment, please visit this gitHub link.
// TASK THREE, DESIGN 2: turning triangle design l-system
LSystem initDesignTwo(){
// initialize turtle variables
float moveDist = 100;
float rotateAngle = 120;
float scaleFactor = 1;
// The intial axiom / input string
String axiom = "F+F+F";
// Create any production rules
HashMap<Character, String> rules = new HashMap<>();
rules.put('F', "[F+F+F]-B-B-B[F+F+F]-B-B-B");
rules.put('B', "+B++B+");
// Create and return the Lsystem
return new LSystem(axiom, rules, moveDist, rotateAngle, scaleFactor);
}Turning Triangle String Output Table
This output table shows what the axiom string became after each iteration of the L-System code. Please see the table above for definitions of each character within the string.
Iteration (n) | Output String |
n = 0 (axiom) | F+F+F |
n = 1 | [F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B |
n = 2 | [[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B++[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B++[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+ |
n = 3 | [[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B++[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B++[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+]-++B++B++++B++B++-++B++B++++B++B++-++B++B++++B++B++[[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B++[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B++[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+]-++B++B++++B++B++-++B++B++++B++B++-++B++B++++B++B+++[[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B++[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B++[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+]-++B++B++++B++B++-++B++B++++B++B++-++B++B++++B++B++[[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B++[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B++[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+]-++B++B++++B++B++-++B++B++++B++B++-++B++B++++B++B+++[[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B++[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B++[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+]-++B++B++++B++B++-++B++B++++B++B++-++B++B++++B++B++[[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B++[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B++[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+[[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B+[F+F+F]-B-B-B[F+F+F]-B-B-B]-+B++B+-+B++B+-+B++B+]-++B++B++++B++B++-++B++B++++B++B++-++B++B++++B++B++ |
L-System Design 3: Tree

This design was inspired by one from The Algorithmic Beauty of Plants by Przemyslaw Prusinkiewicz and Aristid Lindenmayer (p. 25, example c). I changed the rules by adding another push, pop branch set, adjusting movement angles, then adding a diamond leaf pattern to the tips of the branches created.
L-System Definition Table 3: Tree
Vocabulary | “F”, “+”, “-”, “[“, “]”, “L” |
|---|---|
Variables | “F” |
Constants | “+”, “-”, “[“, “]”, “L” |
Rules | (“F” → “FF-[-F+F-L]+[+F+FL][F-FL]”) |
Axiom | "F" |
Move Distance | 130 |
Angle | 25 |
Scale Factor | 1 |
Drawing | “F” means "move forward by move distance" “+” means "turn left by angle” “-” means "turn right by angle" “[“ means “push”. “]” means “pop”. “L” means "draw diamond leaf"*. * left by angle, forward by move distance, right by angle, forward by move distance, right by 180 minus angle, forward by move distance, right by angle, forward by move distance. |
Tree L-System Code
This is the code snippet for the L System design that utlizes the code written for the L-System Class that I completed in task two.
To see the full code associated with this assignment, please visit this gitHub link.
// TASK THREE, DESIGN 3: tree design l-system
LSystem initDesignThree(){ //Tree design L System
// initialize turtle variables
float moveDist = 130;
float rotateAngle = 25;
float scaleFactor = 1;
// The intial axiom / input string
String axiom = "F";
// Create any production rules
HashMap<Character, String> rules = new HashMap<>();
rules.put('F', "FF-[-F+F-L]+[+F+FL][F-FL]");
// Create and return the Lsystem
return new LSystem(axiom, rules, moveDist, rotateAngle, scaleFactor);
}Tree String Output Table
This output table shows what the axiom string became after each iteration of the L-System code. Please see the table above for definitions of each character within the string.
Iteration (n) | Output String |
n = 0 (axiom) | F |
n = 1 | FF-[-F+F-L]+[+F+FL][F-FL] |
n = 2 | FF-[-F+F-L]+[+F+FL][F-FL]FF-[-F+F-L]+[+F+FL][F-FL]-[-FF-[-F+F-L]+[+F+FL][F-FL]+FF-[-F+F-L]+[+F+FL][F-FL]-L]+[+FF-[-F+F-L]+[+F+FL][F-FL]+FF-[-F+F-L]+[+F+FL][F-FL]L][FF-[-F+F-L]+[+F+FL][F-FL]-FF-[-F+F-L]+[+F+FL][F-FL]L] |
n = 3 | FF-[-F+F-L]+[+F+FL][F-FL]FF-[-F+F-L]+[+F+FL][F-FL]-[-FF-[-F+F-L]+[+F+FL][F-FL]+FF-[-F+F-L]+[+F+FL][F-FL]-L]+[+FF-[-F+F-L]+[+F+FL][F-FL]+FF-[-F+F-L]+[+F+FL][F-FL]L][FF-[-F+F-L]+[+F+FL][F-FL]-FF-[-F+F-L]+[+F+FL][F-FL]L]FF-[-F+F-L]+[+F+FL][F-FL]FF-[-F+F-L]+[+F+FL][F-FL]-[-FF-[-F+F-L]+[+F+FL][F-FL]+FF-[-F+F-L]+[+F+FL][F-FL]-L]+[+FF-[-F+F-L]+[+F+FL][F-FL]+FF-[-F+F-L]+[+F+FL][F-FL]L][FF-[-F+F-L]+[+F+FL][F-FL]-FF-[-F+F-L]+[+F+FL][F-FL]L]-[-FF-[-F+F-L]+[+F+FL][F-FL]FF-[-F+F-L]+[+F+FL][F-FL]-[-FF-[-F+F-L]+[+F+FL][F-FL]+FF-[-F+F-L]+[+F+FL][F-FL]-L]+[+FF-[-F+F-L]+[+F+FL][F-FL]+FF-[-F+F-L]+[+F+FL][F-FL]L][FF-[-F+F-L]+[+F+FL][F-FL]-FF-[-F+F-L]+[+F+FL][F-FL]L]+FF-[-F+F-L]+[+F+FL][F-FL]FF-[-F+F-L]+[+F+FL][F-FL]-[-FF-[-F+F-L]+[+F+FL][F-FL]+FF-[-F+F-L]+[+F+FL][F-FL]-L]+[+FF-[-F+F-L]+[+F+FL][F-FL]+FF-[-F+F-L]+[+F+FL][F-FL]L][FF-[-F+F-L]+[+F+FL][F-FL]-FF-[-F+F-L]+[+F+FL][F-FL]L]-L]+[+FF-[-F+F-L]+[+F+FL][F-FL]FF-[-F+F-L]+[+F+FL][F-FL]-[-FF-[-F+F-L]+[+F+FL][F-FL]+FF-[-F+F-L]+[+F+FL][F-FL]-L]+[+FF-[-F+F-L]+[+F+FL][F-FL]+FF-[-F+F-L]+[+F+FL][F-FL]L][FF-[-F+F-L]+[+F+FL][F-FL]-FF-[-F+F-L]+[+F+FL][F-FL]L]+FF-[-F+F-L]+[+F+FL][F-FL]FF-[-F+F-L]+[+F+FL][F-FL]-[-FF-[-F+F-L]+[+F+FL][F-FL]+FF-[-F+F-L]+[+F+FL][F-FL]-L]+[+FF-[-F+F-L]+[+F+FL][F-FL]+FF-[-F+F-L]+[+F+FL][F-FL]L][FF-[-F+F-L]+[+F+FL][F-FL]-FF-[-F+F-L]+[+F+FL][F-FL]L]L][FF-[-F+F-L]+[+F+FL][F-FL]FF-[-F+F-L]+[+F+FL][F-FL]-[-FF-[-F+F-L]+[+F+FL][F-FL]+FF-[-F+F-L]+[+F+FL][F-FL]-L]+[+FF-[-F+F-L]+[+F+FL][F-FL]+FF-[-F+F-L]+[+F+FL][F-FL]L][FF-[-F+F-L]+[+F+FL][F-FL]-FF-[-F+F-L]+[+F+FL][F-FL]L]-FF-[-F+F-L]+[+F+FL][F-FL]FF-[-F+F-L]+[+F+FL][F-FL]-[-FF-[-F+F-L]+[+F+FL][F-FL]+FF-[-F+F-L]+[+F+FL][F-FL]-L]+[+FF-[-F+F-L]+[+F+FL][F-FL]+FF-[-F+F-L]+[+F+FL][F-FL]L][FF-[-F+F-L]+[+F+FL][F-FL]-FF-[-F+F-L]+[+F+FL][F-FL]L]L] |
Task Four: Fabricate your L-System
Once I had designed and produced three L-Systems, it was time to fabricate them using laser cutting and etching. I chose two designs to fabricate: Turning Triangle and Tree. I used cardboard for both designs. When comparing the final result with my original digital designs, I am happy with the output. The tree looks very similar to the digital design. The main different is that because I used corrogated cardboard, some of the etching for the Tree design went all the way through the upper layer of paper and caused a "punch-out" effect. I think this outcome adds to the visual appeal of the design by creating more natural and random variation. When cutting out the Turning Triangles design, I adjusted the lines so that some cut and some etched so that an interesting hole pattern could emerge without cutting out too much material.

Extra Credit
Task One
For this task I used my code for my "Tree" example and added randomness to the size of each movement forward, angle change, and leaf size. The outcome of those changes resulted in an image that had the appearance of a tree on each iteration, but always looked different than the iteration previously generated. Below I have included three examples of the visuals generated on the third iteration of the code after the axiom.

To see snippet of the code that I used to generate these images expand the "Randomized L-System Code Snippet" arrow below. Changes I made from my original L-System are highlighted in light blue for easy identification.
Randomized L-System Code Snippet
This is the code snippet for the L System design that utlizes the code written for the L-System Class that I completed in task two. I used the Tree design that I created in task three as the base upon with I added random variability.
To see the full code associated with this assignment, please visit this gitHub link.
// EXTRA CREDIT, TASK 1: randomized angle and distance tree design l-system
LSystem initProbDesignOne(){ //Tree design L System probabilistically
// initialize turtle variables
float moveDist = random(50, 100);
float rotateAngle = random(10, 35);
float scaleFactor = 1;
// The intial axiom / input string
String axiom = "F";
// Create any production rules
HashMap<Character, String> rules = new HashMap<>();
rules.put('F', "FF-[-F+F-L]+[+F+FL][F-FC]");
// Create and return the Lsystem
return new LSystem(axiom, rules, moveDist, rotateAngle, scaleFactor);
}Task Two
For this task I added complexity to my probabilistic L-System by creating a variety of different rules that can be applied to the same character based on different probabilistic outcomes. To create a more interesting output, I added a character representing circles to the Probabilistic L-System Class. Below I have included three examples of the visuals generated on the third iteration of the code after the axiom.

To see snippets of the code that I used to generate these images expand the "Probabilistic Rule Expression L-System Code Snippets" arrow below. Changes I made from the first Probabilistic L-System Task are highlighted in light blue for easy identification.
Probabilistic Rule Expression L-System Code Snippets
This is the code snippet for the L System design that utlizes the code written for the L-System Class that I completed in task two. I used the Tree design that I created in task three as the base upon with I added probabilistic rule expression to my randomization from the previous extra credit task.
To see the full code associated with this assignment, please visit this gitHub link.
// EXTRA CREDIT, TASK 2: randomized angle and distance with probabilistic rules tree design l-system
LSystem initProbDesignTwo(){ //Tree design L System probabilistically
// initialize turtle variables
float moveDist = random(50, 100);
float rotateAngle = random(20, 25);
float scaleFactor = 1;
int x ;
// The intial axiom / input string
String axiom = "F";
String[] fString = {"FF-[-F+F-L]+[+F+FL][F-FC]", "FF+[+FC]-F-[FL]", "FF+[+F-F+L]-[-F-FC][F+FL]"};
//set up weighted probabilities for F string array
float probFNum = random(0,1);
if (probFNum < 0.5) {
x=0;
} else if (probFNum >= 0.5 && probFNum <= 0.8) {
x=1;
} else {
x=2;
}
//set up random probabilities for L string array
String[] lString = {"L", "C"};
int probL = int(random(0, lString.length));
// Create any production rules
HashMap<Character, String> rules = new HashMap<>();
rules.put('F', fString[x]);
rules.put('L', lString[probL]);
// Create and return the Lsystem
return new LSystem(axiom, rules, moveDist, rotateAngle, scaleFactor);
}


Comments