二维圆圈碰撞奇怪行为

时间:2016-05-01 19:52:52

标签: matlab logic 2d collision-detection physics

Hello StackOverflow社区!我正在处理圆形碰撞问题。简单来说,所有碰撞都是理想的弹性。球只能以对角线移动。所以这听起来很简单。现在,由于某些原因,我现在的代码,我将在下面附上,球和#34;坚持"彼此而不是碰撞。我认为正在发生的事情是他们经常"交换他们的速度"这就是为什么他们不能分开,但我可能错了。

[已删除代码]

2 个答案:

答案 0 :(得分:1)

我会在if之后添加另一个if dist <= (2 * radius)条件,通过预测下次移动后它们之间的距离并与当前距离进行比较来检查它们是相互移动还是相互远离。

dist_next = sqrt( ((x(i)+velocity_x(i)) - (x(j)+velocity_x(j))^2 + ((y(i)+velocity_y(i)) - (y(j)+velocity_y(j)))^2 );

if dist_next < dist
...
end

我希望我的所有括号都正确......

答案 1 :(得分:1)

Jefinthejam答案的另一种选择(我认为一种更广泛使用的方法)是计算两个速度矢量之间的点积并检查其符号。

如果它是负数,则物体彼此远离,您可以安全地不响应碰撞。 好的方面是,如果你需要每帧执行多次测试,计算这个点积比平方根便宜。