2011-09-01 51 views
0

我正在寻找分隔两个相撞的圆圈,以最小量均匀推回它们,以便它们完全分离。如何区分两个相撞的圆?

我有这个至今:

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

http://mathworld.wolfram.com/Direction.html –

+0

好的,这有帮助,但现在我有另一个问题:物体没有锁定位置,但速度较高的物体正在推动另一个。我应该编辑这个问题还是发布一个新问题? –

+0

[分离两个碰撞圆]的可能的重复(http://stackoverflow.com/questions/7266804/separating-twocolliding-circles) –

回答

1

使用单位矢量来移动两个圆圈separation/2

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

circle1.Position += unitVector * seperation/2

circle2.Position -= unitVector * seperation/2

编辑:

只是改变seperation/2和/或+-一部分。它可以让你将它移动任何你想要的距离。

+0

好吧,这有帮助,但现在我有另一个问题:对象没有锁定位置但速度较快的那个正在推动另一个。我应该编辑这个问题还是发布一个新问题或者你认为你可以提供帮助? –