sketch = function (s) {
const tau = 2 * Math.PI;
const n = 25;
let particles = d3.range(n).map(() => ({
pos: [container.width / 3, container.height / 3],
v: [Math.random() * 10 - 5, Math.random() * 10 - 5]
}));
s.setup = function () {
s.createCanvas(container.width, container.height);
s.noStroke();
};
s.draw = function () {
s.background("#eee");
switch (boundary) {
case "square":
s.fill("#fff");
s.rect(10, 10, container.width - 20, container.height - 20);
break;
case "circle":
s.fill("#fff");
s.circle(
container.width / 2,
container.height / 2,
Math.min(container.height, container.width) - 20
);
break;
}
particles.forEach((d) => {
s.fill("blue");
s.circle(d.pos[0], d.pos[1], 5);
d.pos[0] += d.v[0];
d.pos[1] += d.v[1];
switch (boundary) {
case "square":
d.v[0] =
d.pos[0] < 10
? -d.v[0]
: d.pos[0] > container.width - 10
? -d.v[0]
: d.v[0];
d.v[1] =
d.pos[1] < 10
? -d.v[1]
: d.pos[1] > container.height - 10
? -d.v[1]
: d.v[1];
break;
case "circle":
let r = (Math.min(container.height, container.width) - 20) / 2;
if (
Math.sqrt(
Math.pow(d.pos[0] - container.width / 2, 2) +
Math.pow(d.pos[1] - container.height / 2, 2)
) > r
) {
d.v[0] = -d.v[0];
d.v[1] = -d.v[1];
}
break;
}
});
};
}