breathing, tail swing, process scripts

This commit is contained in:
Daniel Kauss Serna 2026-03-11 23:58:28 +01:00
parent 1c2a3f6ac2
commit d477b63748
5 changed files with 240 additions and 33 deletions

58
chain2.js Normal file
View file

@ -0,0 +1,58 @@
let vec = p5.Vector
class ConstraintPoint {
constructor(x, y, size) {
this.size = size;
this.pos = new vec(x, y);
this.forward = new vec(0, 0);
}
follow(targetX, targetY, prevForward = null) {
let target = new vec(targetX, targetY);
let targetForward = vec.sub(target, this.pos);
let targetAngle = targetForward.heading();
if (prevForward) {
let a = targetAngle - prevForward;
while (a > PI) { a -= TWO_PI; }
while (a < -PI) { a += TWO_PI; }
a = constrain(a, -0.3, 0.3);
targetAngle = prevForward + a;
}
this.forward = vec.fromAngle(targetAngle);
let dir = vec.mult(this.forward, -this.size);
this.pos = vec.add(target, dir);
}
}
let points = []
function setup() {
createCanvas(400, 400);
for (let i = 0;i < 10;i++) {
points.push(new ConstraintPoint(0, 0, 20));
}
}
function draw() {
background(220);
points[0].follow(mouseX, mouseY)
for (let i = 1;i < 10;i++) {
let prev = points[i - 1];
points[i].follow(prev.pos.x, prev.pos.y, prev.forward.heading());
}
for (let i = 0;i < 10;i++) {
let pos = points[i].pos;
noFill();
circle(pos.x, pos.y, 40);
}
}