let center; function setup(){ setFrameRate(60); createCanvas(window.innerWidth, window.innerHeight); center = createVector(window.innerWidth / 2, window.innerHeight / 2); noFill(); } function draw(){ clear(); background(40, 40, 42); for (let i = 6; i < Infinity; i++){ let quadrant = (i + 1) % 4 + 1; let f = fibo(i); let x = 0, y = 0, startAngle, endAngle, a, b; if (quadrant == 1){ for (let j = i - 3; j > 0; j -= 4) x -= fibo(j); for (let k = i; k > 0; k -= 4) y -= fibo(k); startAngle = -HALF_PI; endAngle = TWO_PI; a = 0; b = 1; } if (quadrant == 2){ for (let j = i; j > 0; j -= 4) x -= fibo(j); for (let k = i - 1; k > 0; k -= 4) y -= fibo(k); startAngle = PI; endAngle = -HALF_PI; a = 1; b = 1; } if (quadrant == 3){ for (let j = i - 1; j > 0; j -= 4) x -= fibo(j); for (let k = i - 4; k > 0; k -= 4) y += fibo(k); startAngle = HALF_PI; endAngle = PI; a = 1; b = 0; } if (quadrant == 4){ for (let j = i - 4; j > 0; j -= 4) x += fibo(j); for (let k = i - 3; k > 0; k -= 4) y -= fibo(k); startAngle = 0; endAngle = HALF_PI; a = 0; b = 0; } stroke(150); strokeWeight(1); rect(center.x + x, center.y + y, f, f); stroke("#FF0000"); strokeWeight(3); arc(center.x + x + a * f, center.y + y + b * f, f * 2, f * 2, startAngle, endAngle); if (fibo(i) > width) break; } } function fibo(i){ if (i == 1 || i == 2) return 1; return fibo(i - 1) + fibo(i - 2); }