L System

Tweak the axiom and the rules to produce many kinds of L systems, or just play with the sliders to see what you get.

```// L-system rules and initial state
axiom = "F";
rules = {"F": "F+G++G-F--FF-G+", "G": "-F+GG++G+F--G"};
const iterations = 5;  //min=1 max=6 step=1
const distance = 3;  //min=1 max=5 step=1
const angle =60;  //min=1 max=179 step=1

// You can find the Turtle API reference here: https://turtletoy.net/syntax
Canvas.setpenopacity(1);

// Global code will be evaluated once.
const t = new Turtle();

// Function to generate the L-system string
function generate_lsystem_string(axiom, rules, iterations) {
current_string = axiom;
for(i=0;i<iterations;++i ) {
new_string = "";
for( j=0;j<current_string.length;++j) {
symbol = current_string[j];
new_string += rules[symbol];
}
current_string = new_string;
}
return current_string;
}

// Function to draw the L-system with turtle graphics
function draw_lsystem(t, lsystem_string) {
for( i=0;i<lsystem_string.length;++i ) {
symbol = lsystem_string[i];
if( symbol == "F" )
t.forward(distance);
else if( symbol == "G")
t.forward(-distance);
else if( symbol == "+")
t.right(angle);
else if( symbol == "-")
t.left(angle);
}
}

// Main drawing function
function walk(i) {
// Generate L-system string
lsystem_string = generate_lsystem_string(axiom, rules, iterations);

// Set up turtle
t.pendown();

// Draw L-system
draw_lsystem(t, lsystem_string);
return false;
}```