我正在用 Java 为 Android 手机编写一个弹跳球游戏。除了碰撞和恢复系数的小问题之外,一切似乎都工作正常。
当球与表面碰撞时,会计算该表面的法线 vector (nx 和 ny),并且球的 vector 方向(dx 和 dy)反射(reflect)在该法线 vector 中。
目前我使用 0.9 作为恢复系数,并将 dx 和 dy 乘以该值,这显然过于简单化,因为它不能正确模拟滚动。
是否有一个简单的公式可以更准确地计算新的 dx 和 dy,这样,如果球在碰撞时几乎平行于斜坡行进,那么它损失的速度会比垂直碰撞时损失的速度要小。
很抱歉没有发布我的任何代码,我离开了我的计算机,因此如果这有助于任何人理解,可以稍后发布。
感谢您提前提供的任何帮助。
最佳答案
恢复系数与碰撞物体的相对弹性有关。这是解释球和表面在撞击时都会变形这一事实的简单方法。一些变形能量会损失掉(例如产生的热量、声波等),但大部分会返回到“推”另一个物体。
如果恢复系数等于 1.0,则不会损失任何能量。将其视为“捏造因素”,这样您就不必解决动态弹性问题。
滚动是另一回事。
我认为恢复系数应该只应用于速度的法向分量。如果您想更接近真实的物理现象,则必须将摩擦和滑动应用于切向分量。
除了 x、y 方向的位移之外,您还需要另一个方程。您将需要另一个用于围绕球质心的 z 轴的扭矩。
牛顿运动方程会将 x 和 y 方向上的力以及球绕 z 轴的力矩相加。
关于Java 弹跳球游戏 - 滚球场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4898409/