我正在寻找将两个碰撞的圆圈分开,以最小的数量将它们平均推回,以便它们完全分开。
到目前为止,我有这个:
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
添加方向性?
谢谢!
答案 0 :(得分:1)
使用单位向量按separation / 2
移动两个圆圈。
unitVector = (circle1.Position - circle2.Position) / distance
circle1.Position += unitVector * seperation / 2
circle2.Position -= unitVector * seperation / 2
编辑:
只需更改seperation / 2
和/或+-
部分即可。它可以让你移动任何你想要的距离。