let nLayers = 10,
w;
let r = [];
let n = [];
function setup() {
createCanvas(windowWidth, windowHeight);
}
function draw() {
background(240, 240, 230);
stroke(0, 50, 70);
strokeWeight(0.1);
noFill();
w = min(width, height) / 1.5;
angleMode(DEGREES);
translate(width / 2, height / 2);
detN();
diat();
noLoop();
}
function diat() {
for (let i = 0; i < n[0]; i++) {
push();
rotate((360 / n[0]) * i);
tentacle();
pop();
}
noStroke();
fill(240, 240, 230, 200);
circle(0, 0, r[0]);
stroke(0, 50, 70);
strokeWeight(0.5);
for (let j = 0; j < n[1] * 3; j++) {
beginShape();
for (let i = 0; i <= 360; i++) {
x =
((r[0] - (j * n[1]) / 4) * sin(i) + 5 * sin(i * 5 * n[0])) / 2 +
noise(x);
y = (r[0] * cos(i)) / 2;
for (let j = 0; j < 20; j++) {
vertex(x, y);
}
}
endShape();
}
strokeWeight(0.1);
a = int(random(5, 9));
b = int(random(4, 10));
c = max(a - b, 2);
noFill();
for (let i = 0; i < 3600; i = i + 10) {
x = ((c * r[0]) / 8) * cos(i) + (r[0] / 8) * cos((c / b) * i) + noise(x);
y = ((c * r[0]) / 8) * sin(i) - (r[0] / 8) * sin((c / b) * i);
circle(x + 2 * noise(x), y, a / 2);
circle(x + 2 * noise(x), y, a / 10);
}
p = int(random(2, 20));
z = int(random(1, 4));
for (let j = 0; j < n[2] * z; j++) {
beginShape();
for (let i = 0; i <= 360; i++) {
x = ((r[1] - j * 5) * sin(i) + p * sin(i * p)) / 2;
y = ((r[1] - j * 5) * cos(i)) / 2;
for (let j = 0; j < 20; j++) {
vertex(x, y);
}
}
endShape();
}
strokeWeight(1);
g = int(random(60, 180));
for (let i = 0; i < n[3] * 2; i++) {
push();
rotate((360 / (n[3] * 2)) * i);
for (let j = 0; j < g; j++) {
x = (r[3] * sin(j) * cos(j / 2)) / 2 + 10 * noise(x);
y = (r[3] * cos(j)) / 2;
point(x, y);
}
pop();
}
strokeWeight(0.5);
p = int(random(2, 20));
for (let i = 0; i < n[4]; i++) {
push();
rotate((360 / n[4]) * i);
for (let j = 0; j < p; j++) {
ellipse(
r[5] / 2 - j,
0 - p - j / 2,
10 - j - noise(x),
10 - j - noise(y)
);
}
pop();
}
strokeWeight(0.1);
a = random(2, 3);
b = random(3, 4);
noFill();
beginShape();
for (let i = 0; i < 10000; i = i + 30) {
x =
(((a - b) * r[7]) / 7) * cos(i) +
(r[7] / 7) * cos(((a - b) / b) * i) +
noise(x);
y = (((a - b) * r[7]) / 7) * sin(i) - (r[7] / 7) * sin(((a - b) / b) * i);
vertex(x, y);
}
endShape();
a = random(2, 3);
b = random(10, 20);
noFill();
beginShape();
for (let i = 0; i < 10000; i = i + 20) {
x = ((a * r[8]) / b) * cos(i / b) * cos(i);
y = ((a * r[8]) / b) * sin(i / b);
vertex(x, y);
}
endShape();
}
function detN() {
r = [];
n = [];
n[0] = int(random(3, 19));
r[0] = w;
nLayers = 10;
for (let i = 1; i < nLayers; i++) {
n[i] = int(random(3, 12));
r[i] = r[i - 1] - int(random(5, r[i - 1] / 1.5)) / 2;
}
}
function mousePressed() {
setup();
draw();
}
function tentacle() {
k = int(random(20, 100));
b = random(0.5, 1);
for (i = 2; i < 360; i++) {
x = k * sin(i / b);
y = (w / 360) * i;
for (let j = 0; j < 100; j++) {
point(x + 20 * noise(x), y + noise(y));
}
}
}