let jellies;
function setup() {
createCanvas(600, 600);
rectMode(CENTER);
angleMode(DEGREES);
jellies = [];
nJellies = int(random(3, 10));
for (let i = 0; i < nJellies; i++) {
jellies[i] = {
r: random(0, width / 1.5),
angle: random(0, 360),
scl: random(0.1, 1),
rot: random(0, 360),
a: random(40, 80),
b: random(40, 80),
c: random(0.8, 5)
};
}
m = 10;
nRot = int(random(5, 8));
}
function draw() {
background(2, 106, 224);
translate(width / 2, height / 2);
t = frameCount / 3;
noStroke();
for (let i = width / 2; i > 0; i--) {
fill(24 - i, 80 - i, 184 - i);
circle(0, 0, (i * width) / 100);
}
if (keyIsPressed) {
nRot2 = 1;
} else {
nRot2 = nRot;
}
for (let j = 0; j < nRot2; j++) {
push();
rotate((j * 360) / nRot);
for (let i = 0; i < jellies.length; i++) {
push();
rotate(jellies[i].angle - t / jellies[i].c);
translate(
jellies[i].r + (jellies[i].r * sin(t)) / 2,
jellies[i].r * sin(t)
);
rotate((t * jellies[i].c) / 30 + jellies[i].b + jellies[i].a);
scale(jellies[i].scl, jellies[i].scl);
jelly(jellies[i].a, jellies[i].b, jellies[i].c);
pop();
noFill();
strokeWeight(0.3);
stroke(255, 255, 255, 150);
circle(
jellies[i].r * cos(jellies[i].angle + t / jellies[i].c - t / 2),
jellies[i].r * sin(jellies[i].angle + t / jellies[i].c),
jellies[i].a / 10
);
circle(
(jellies[i].r / 3) * cos(jellies[i].angle + t / jellies[i].c - t / 2),
jellies[i].r * 1.2 * sin(jellies[i].angle + t / jellies[i].c),
jellies[i].a / 30
);
noStroke();
}
pop();
}
for (let i = 0; i < jellies.length; i++) {}
border();
}
function jelly(a, b, c) {
fill(100, 220, 255, 2);
for (let i = 0; i < 20; i++) {
ellipse(0, 0, 80 - i, 160 - i / 2);
}
noFill();
strokeWeight(2);
beginShape();
for (let k = 0; k < 50; k += 0.3) {
stroke(255, 255, 255, k * 2);
point(
-20 + k * sin(k * 5 + t / b) * cos((t * 5) / a + b),
30 + (k * b) / 10
);
point(
20 + k * sin(k * 5 + t / a) * cos((t * 5) / c + a),
30 + (k * a) / 10
);
}
endShape();
strokeWeight(1);
for (let i = 0; i < 180; i += 3) {
for (let j = 0; j < 2; j++) {
stroke(
20 + 124 * abs(sin(i + t * m)),
60 + 230 * abs(sin(i + t * m)),
100 + 255 * abs(sin(i + t * m)),
50
);
x = (42 - j * 24) * cos(-90 + i);
y = 80 * sin(-90 + i);
circle(x, y, 2);
circle(-x, y, 2);
}
}
}
function border() {
noFill();
stroke(20, 50, 60);
strokeWeight(4);
rect(0, 0, width - 20, height - 20);
}
function mousePressed() {
frameCount = 0;
setup();
draw();
}
function keyPressed() {}