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