You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

63 lines
1.4 KiB

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);
}