top of page

L-Systems: "Stringing Along"

  • Writer: Joelle McDonald
    Joelle McDonald
  • Feb 21, 2025
  • 11 min read

Laser cut L-System designs created in this blog post
Laser cut L-System designs created in this blog post

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"

Output of "I" and "L" Turtle Program
Output of "I" and "L" Turtle Program
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

Triangle in Turtle
Triangle in Turtle
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


Pentagon in Turtle
Pentagon in Turtle
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

Circle in Turtle
Circle in Turtle
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


Axiom and iterations 1 through 3 of my Wreath L-System
Axiom and iterations 1 through 3 of my Wreath L-System

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


Axiom and iterations 1 through 3 of my Turning Triangle L-System
Axiom and iterations 1 through 3 of my Turning Triangle L-System

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


Axiom and iterations 1 through 3 of my Tree L-System
Axiom and iterations 1 through 3 of my Tree L-System

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


bottom of page