Files
2026-04-20 11:20:54 +02:00

60 lines
1.4 KiB
JavaScript

const amountOfFormPoints = 5;
const stepSize = 1;
const initRadius = 150;
const mouseAttraction = 1;
let centerX, centerY;
let x = [];
let y = [];
function setup() {
createCanvas(windowWidth, windowHeight);
// inital setup
centerX = width / 2;
centerY = height / 2;
const angle = radians(360 / amountOfFormPoints);
for (let i = 0; i < amountOfFormPoints; i++) {
x.push(cos(angle * i) * initRadius);
y.push(sin(angle * i) * initRadius);
}
// styling
stroke(0, 75);
strokeWeight(0.5);
background(255);
noFill();
}
function draw() {
// float towards mouse position
centerX += (mouseX - centerX) * mouseAttraction;
centerY += (mouseY - centerY) * mouseAttraction;
// calculate new points
for (let i = 0; i < amountOfFormPoints; i++) {
x[i] += random(-stepSize, stepSize);
y[i] += random(-stepSize, stepSize);
// ellipse(x[i] + centerX, y[i] + centerY, 5, 5);
}
// first controlPoint
beginShape();
curveVertex(x[0] + centerX, y[0] + centerY);
// only these points are drawn
for (let i = 0; i < amountOfFormPoints; i++) {
curveVertex(x[i] + centerX, y[i] + centerY);
}
// Connect to the first poing again
// or use endShape(CLOSE); but result is different
curveVertex(x[0] + centerX, y[0] + centerY);
// end controlPoint
curveVertex(
x[amountOfFormPoints - 1] + centerX,
y[amountOfFormPoints - 1] + centerY,
);
endShape();
}