У меня много частиц, движущихся вокруг и попадающих в детектор, чтобы видеть, когда они касаются друг друга. Если две частицы касаются, они должны отскакивать в противоположном направлении.Имитация двух кругов, отскакивающих друг от друга
particle.moveSelf = function() {
var radians = this.angle * Math.PI/180;
var moveX = this.velocity * Math.sin(radians);
var moveY = this.velocity * Math.cos(radians);
for (var i = 0; i < particles.length; i++) {
var distance = this.position.getDistance(new Point(particles[i].position.x, particles[i].position.y));
//if distance < radius 1 + radius 2, bounce this circle away
if (distance < (this.radius + particles[i].radius) && this.id !== particles[i].id) {
this.velocity = -this.velocity;
}
}
this.position.x += moveX;
this.position.y += moveY;
};
Когда я запускаю этот код, круги застревают друг в друге, перемещаясь вперед и назад на 1 * скорость каждого кадра.
Есть много вопросов о том, как выработать скорость или угол отката, но моя проблема заключается в том, что он застревает в бесконечном колебании.
Мы не можем дать ответ, как мы не можем проверить это, но, вот несколько предложения. Сначала сделайте так, а затем вычислите позицию. Внутри for проверьте сначала свой идентификатор (теперь вы его проверяете последним), используйте 'if (this.id === particle [i] .id) continue;' – GramThanos