↬ Follow
A segmented line follows the mouse. The relative angle from each segment to the next is
calculated with atan2() and the position of the next is calculated with
sin()
and cos().
Adapted from this p5 example.
Sketch
Code
<script>
import P5 from "p5-svelte";
const sketch = (p5) => {
let x = [],
y = [],
segNum = 6,
segLength = 40;
for (let i = 0; i < segNum; i++) {
x[i] = 0;
y[i] = 0;
}
p5.setup = () => {
p5.createCanvas(865, 400);
p5.strokeWeight(12);
p5.stroke('#ed225d80');
};
p5.draw = () => {
p5.background(0);
dragSegment(0, p5.mouseX, p5.mouseY);
for (let i = 0; i < x.length - 1; i++) {
dragSegment(i + 1, x[i], y[i]);
}
};
function dragSegment(i, xin, yin) {
const dx = xin - x[i];
const dy = yin - y[i];
const angle = p5.atan2(dy, dx);
x[i] = xin - p5.cos(angle) * segLength;
y[i] = yin - p5.sin(angle) * segLength;
segment(x[i], y[i], angle);
}
function segment(x, y, a) {
p5.push();
p5.translate(x, y);
p5.rotate(a);
p5.line(0, 0, segLength, 0);
p5.pop();
}
};
</script>
<P5 {sketch} />