javascript – 保持圈子不重叠

我试图找出JavaScript数学,将两个碰撞的圆圈相互分开.

此图像的左侧是我已有的视觉表示:

x1,y1,x2和y2是圆的位置,r1和r2是圆的半径,θ是圆之间相对于画布的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; 
}
上一篇:最佳算法生成算法的STL(3-D几何文件)吗?


下一篇:二分图匹配之最佳匹配——KM算法