如何分开两个碰撞的圆圈?

时间:2011-09-01 05:40:56

标签: c# math xna collision-detection geometry

我正在寻找将两个碰撞的圆圈分开,以最小的数量将它们平均推回,以便它们完全分开。

到目前为止,我有这个:

var totalRadius : Number = _circle1.radius + _circle2.radius;
var x : Number = _circle1.position.x - _circle2.position.x;
var y : Number = _circle1.position.y - _circle2.position.y;

var distanceSquared : Number = (x * x) + (y * y);

if (distanceSquared < totalRadius * totalRadius)
{   
    var distance : Number = Math.sqrt(distanceSquared);

    var separation : Number = totalRadius - distance;

    // No idea what to do now!

}

到目前为止,我已经弄明白了。所以我知道发生了碰撞,我知道每个圆圈都是separation相互之间的数量(因此我想将它除以2将它们分开)。

问题在于分离没有任何隐含的方向性,我不知道该怎么做。我不能只做circle1.position -= separation / 2; circle2.position += separation / 2,因为它会同时移动X轴和Y轴。

如何为separation添加方向性?

谢谢!

1 个答案:

答案 0 :(得分:1)

使用单位向量按separation / 2移动两个圆圈。

unitVector = (circle1.Position - circle2.Position) / distance

circle1.Position += unitVector * seperation / 2

circle2.Position -= unitVector * seperation / 2

编辑:

只需更改seperation / 2和/或+-部分即可。它可以让你移动任何你想要的距离。