Сначала я бы изменил:
dist = distance(this._x, this._y, people[i].x, people[i].y) - 4 * this.radius;
на следующее:
dist = distance(this._x, this._y, people[i].x, people[i].y) - (this.radius + people[i].radius);
Это должно дать вам реалистичные c столкновения, когда ваши круги разные radius
Затем, при столкновении объектов мыши, я бы начал с чего-то вроде:
var dist = distance(mouse.x, mouse.y, people[i].x, people[i].y) - people[i].radius;
if (dist <= 100) {
let m = new Person(mouse.x, mouse.y, 100);
//TODO set proper velocity
m.velocity = { x: 2, y: 2 };
resolveCollision(m, people[i]);
}
Таким образом, мы повторно используем resolCollision, сохраняя тот же эффект, что и столкновение между другими объектами. , Вам нужно найти способ установить правильную скорость для мыши, если она предполагает, что мышь движется вправо и вниз.
Что-то еще, что я заметил, когда мы представили мышь resolveCollision
просто меняет скорости:
https://github.com/AlverPalk/collision/blob/master/src/ts/util-elastic-collision.js#L58
Я думаю, что это должно также привести к уменьшению скоростей при столкновение, как потеря энергии при ударе, если не каждое столкновение с мышью увеличит скорость до точки, в которой вся система будет двигаться очень быстро
код на моей вилке:
https://github.com/heldersepu/collision/commits/master