球碰撞问题

时间:2012-03-01 02:03:06

标签: math 2d collision vector-graphics

所以我有一个碰撞球系统通常可以工作,除了它们碰撞相似的方向,相隔不到90度。

Diagram of colliding balls problem

这是因为上面的球试图碰撞黄色线,这个黄色线应该是碰撞平面,但它将它从错误的方向发出,它“跟随”另一个球。碰撞的一般算法是:

dot = direction.surface;
parallel = surface * dot;
perpendicular = direction - parallel;
direction = perpendicular - parallel;

它取消了平行于表面法线的方向的分量,垂直于碰撞平面,垂直于表面法线的部分不变。

有人知道解决这个问题吗?我做错了什么?

编辑:所以现在我补充说:

average = (ball1.velocity + ball2.velocity) / 2;
ball1.velocity -= average;
ball2.velocity -= average;

在进行上述计算之前,之后:

ball1.velocity += average;
ball2.velocity += average;

根据@ Beta的答案,进入正确的参考框架。现在的问题是球的速度没有得到保持,因为它们都具有相同的速度和质量,但在碰撞之后它们是不同的。我不认为这应该发生,或者是它?

1 个答案:

答案 0 :(得分:2)

考虑从墙上弹出球的一维问题。简单。

现在看着我在飞行中从喷气式飞机的前舱壁上弹出一个球。球以252米/秒的速度向北移动,舱壁以250米/秒的速度向北移动。答案并不明显。但是转移到我的坐标系(通过减去舱壁的速度,250米/秒,从所有东西),问题是微不足道的。解决它,然后将结果移回地面框架(通过 250 m / s添加到所有部分),然后就完成了。

现在一个球以一定角度从墙上弹回的2D问题。简单。 (但请验证您的代码是否正确执行。)

现在两个球以相等和相反的动量碰撞(我假设它们现在具有相同的质量)。你可以想象在碰撞平面上有一堵黄墙,答案很容易。

现在两个球碰撞,但是的速度加起来为零。还有一堵黄色的墙,但它正在移动。好吧,通过从所有东西中减去球的速度(sum / 2)的平均值来移动到墙的框架中,解决更简单的问题,然后通过将相同的速度添加回所有内容来向后移动,然后就完成了。