2011-09-01 97 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

好吧,這有幫助,但現在我有另一個問題:對象沒有鎖定位置但速度較快的那個正在推動另一個。我應該編輯這個問題還是發佈一個新問題或者你認爲你可以提供幫助? –