initial commit, worm thingy

This commit is contained in:
Daniel Kauss Serna 2026-03-10 10:28:46 +01:00
commit a23a5b16e3
5 changed files with 181 additions and 0 deletions

80
sketch.js Normal file
View file

@ -0,0 +1,80 @@
var vec = p5.Vector;
class Segment {
constructor(x, y, size) {
this.size = size;
this.pos = new vec(x, y);
this.forward = new vec(0, 0);
}
get_rel(angle, d) {
let dir = vec.rotate(this.forward, angle);
dir.setMag(d);
return vec.add(this.pos, dir)
}
follow(x, y) {
let target = new vec(x, y);
let dir = vec.sub(this.pos, target);
this.forward = vec.sub(target, this.pos);
dir.setMag(this.size);
this.pos = vec.add(target, dir);
}
}
var n = 0;
var sizes = [10, 15, 20, 25, 30, 24, 27, 21, 15, 17, ]
var segments = [];
function setup() {
createCanvas(800, 800);
n = sizes.length;
for (let i = 0; i < n; i++) {
let seg = new Segment(400, 400, sizes[i]);
segments.push(seg);
}
}
function draw() {
background(150);
// fisica
segments[0].follow(mouseX, mouseY);
for (let i = 1; i < n; i++) {
let prev_seg = segments[i - 1];
segments[i].follow(prev_seg.pos.x, prev_seg.pos.y);
}
// dibujar
fill(100, 200, 150);
stroke(0);
strokeWeight(2);
beginShape();
let head = segments[0];
let tail = segments[n - 1];
for (let a = -HALF_PI; a <= HALF_PI; a += PI / 10) {
let p = head.get_rel(a, head.size);
vertex(p.x, p.y);
}
for (let i = 1; i < n - 1; i++) {
let p = segments[i].get_rel(HALF_PI, segments[i].size);
vertex(p.x, p.y);
}
for (let a = HALF_PI; a <= HALF_PI + PI; a += PI / 10) {
let p = tail.get_rel(a, tail.size);
vertex(p.x, p.y);
}
for (let i = n - 2; i >= 1; i--) {
let p = segments[i].get_rel(-HALF_PI, segments[i].size);
vertex(p.x, p.y);
}
endShape(CLOSE);
}