二维圆圈碰撞奇怪的行为
2D Circle-Circle Collision Strange Behavior
你好 Whosebug 社区!我正在处理圆圈碰撞问题。简单来说,所有的碰撞都是理想弹性的。球只能沿对角线移动。所以这听起来很简单。现在,出于某种原因,我将在下面附加的当前代码中,球 "stick" 相互碰撞而不是碰撞。我认为正在发生的事情是它们一直 "swapping their velocities",这就是为什么它们无法分开,但我可能是错的。
[代码已删除]
我会在 if dist <= (2 * radius)
之后添加另一个 if
条件,通过预测下一次移动后它们之间的距离并与当前移动进行比较,来检查它们是相互靠近还是远离彼此距离.
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
我希望我所有的括号都正确...
Jefinthejam 的答案的替代方法(我认为一种更广泛使用的方法)是计算两个速度向量之间的点积并检查其符号。
如果它是负数,那么物体正在远离彼此,你可以安全地不响应碰撞。
好处是,如果您需要每帧执行多次测试,计算此点积比平方根更便宜。
你好 Whosebug 社区!我正在处理圆圈碰撞问题。简单来说,所有的碰撞都是理想弹性的。球只能沿对角线移动。所以这听起来很简单。现在,出于某种原因,我将在下面附加的当前代码中,球 "stick" 相互碰撞而不是碰撞。我认为正在发生的事情是它们一直 "swapping their velocities",这就是为什么它们无法分开,但我可能是错的。
[代码已删除]
我会在 if dist <= (2 * radius)
之后添加另一个 if
条件,通过预测下一次移动后它们之间的距离并与当前移动进行比较,来检查它们是相互靠近还是远离彼此距离.
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
我希望我所有的括号都正确...
Jefinthejam 的答案的替代方法(我认为一种更广泛使用的方法)是计算两个速度向量之间的点积并检查其符号。
如果它是负数,那么物体正在远离彼此,你可以安全地不响应碰撞。 好处是,如果您需要每帧执行多次测试,计算此点积比平方根更便宜。