我试图找出 JavaScript 数学来将两个碰撞的圆圈彼此分开。
这张图片的左侧是我已经拥有的东西的视觉表示:
x1、y1、x2 和 y2 是圆的位置,r1 和 r2 是圆的半径,theta 是圆之间相对于画布 x 轴的角度。
如何计算两个圆圈的新 [x,y] 位置,以便它们“推”开彼此,如图像右侧所示?
我还计划让较小的圆圈比较大的圆圈更受推。通过使用它们的归一化半径作为乘数,这应该很容易。
我试图找出 JavaScript 数学来将两个碰撞的圆圈彼此分开。
这张图片的左侧是我已经拥有的东西的视觉表示:
x1、y1、x2 和 y2 是圆的位置,r1 和 r2 是圆的半径,theta 是圆之间相对于画布 x 轴的角度。
如何计算两个圆圈的新 [x,y] 位置,以便它们“推”开彼此,如图像右侧所示?
我还计划让较小的圆圈比较大的圆圈更受推。通过使用它们的归一化半径作为乘数,这应该很容易。
// Just take the vector difference between the centers
var dx = x2 - x1;
var dy = y2 - y1;
// compute the length of this vector
var L = Math.sqrt(dx*dx + dy*dy);
// compute the amount you need to move
var step = r1 + r2 - L;
// if there is a collision you will have step > 0
if (step > 0) {
// In this case normalize the vector
dx /= L; dy /= L;
// and then move the two centers apart
x1 -= dx*step/2; y1 -= dy*step/2;
x2 += dx*step/2; y2 += dy*step/2;
}