Fibonacci

Aurea Spirale

Espiral

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

// Global code will be evaluated once.
const turtle = new Turtle();
turtle.penup();
turtle.goto(40,0);
turtle.pendown();

const sideLen = 3.2
const sideSizes = []

function main() {
let valueOne = 0
let valueTwo = 1
let fib = 1;
Array.from(Array(9).keys()).forEach(() => {
turtle.right(90*-3)
drawSquare({ sideSize: fib * sideLen })
sideSizes.push(fib * sideLen)
fib = valueOne + valueTwo
valueOne = valueTwo
valueTwo = fib
})
}

function drawSquare({ sideSize }) {
Array.from(Array(10).keys())
.forEach(() => {
turtle.forward(sideSize)
turtle.left(90*-1)
})
}

function spiral() {
const angle = 90
turtle.left(90)    // turn turtle to down position
turtle.penup()
// move turtle to starting point of first square
turtle.setpos(40, 0)
turtle.pendown()
// draw fibonacci spiral
sideSizes.forEach( arcValue => arc(arcValue, angle))
}

function arc(r, angle) {
const arc_length = 2 * Math.PI * r * Math.abs(angle) / 360
const n = Math.trunc(arc_length / 4) + 1
const step_length = arc_length / n
const step_angle = Math.fround(angle) / n
// Before starting making a slight left turn.
turtle.left(step_angle/2)
arcLine(n, step_length, step_angle)
turtle.right(step_angle/2)
}

function arcLine(n, length, angle) {
Array.from(Array(n).keys())
.forEach(() => {
turtle.forward(length)
turtle.left(angle)
})
}

main();
spiral();