dozen
A dance of the euclidean egg
let rad = 50;
let n = 12;
let p = true;
let t = 0;
let c = 0;
function setup() {
createCanvas(windowWidth, windowHeight);
background(255);
angleMode(DEGREES);
strokeWeight(0.1);
fill(242, 238, 177, 10);
stroke(100, 90, 10);
}
function draw() {
translate(width / 2, height / 2);
scale(0.8, 0.8);
rad = min(width, height) / 4;
if (p) {
c++;
}
t = 360 * sin(c / 10) * sin(c / 10);
fill(252 + 30 * sin(t / 2), 238 + 30 * sin(t), 177 + 30 * sin(t), 10);
stroke(120, 100, 60);
for (let i = 0; i < n; i++) {
push();
rotate(i * 30 + t);
translate(i - (width / 4) * cos(t / 5 + i), 0);
rotate(i * 10 + t);
euclideanEgg(-t);
pop();
}
rad = max(width, height) / 2;
euclideanEgg(t);
}
function euclideanEgg(a) {
beginShape();
for (let i = -90; i < 90; i++) {
vertex((rad / 4) * sin(i + a), (rad / 4) * cos(i + a));
}
for (let i = 90; i < 135; i++) {
vertex((rad / 2) * sin(i + a) - rad / 4, (rad / 2) * cos(i + a));
}
for (let i = 135; i < 225; i++) {
vertex(
(rad / (2 * sqrt(3)) / 2) * sin(i + a),
(rad / (2 * sqrt(3)) / 2) * cos(i + a) - rad / 4
);
}
for (let i = 225; i < 270; i++) {
vertex((rad / 2) * sin(i + a) + rad / 4, (rad / 2) * cos(i + a));
}
endShape(CLOSE);
}
function mousePressed() {
p = !p;
}
function windowResized() {
setup();
draw();
}