【发布时间】:2011-09-01 14:07:47
【问题描述】:
我希望将两个碰撞的圆圈分开,以最小的量将它们均等地向后推,以使它们完全分开。
到目前为止我有这个:
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 添加方向性?
谢谢!
【问题讨论】:
-
好的,这很有帮助,但现在我遇到了另一个问题:物体没有锁定到位,但速度较高的物体正在推动另一个物体。我应该编辑这个问题还是发布一个新问题?
标签: c# math xna collision-detection geometry