我正在用Java编写一款用于Android手机的弹跳球游戏。除了碰撞的小问题和恢复系数之外,一切似乎都能正常工作。
当球与表面碰撞时,计算该表面的矢量法线(nx和ny),球的矢量方向(dx和dy)反映在该法线矢量中。
目前我正在使用0.9作为恢复系数,因此将dx和dy乘以此值,这显然过于简单化,因为它没有正确模拟滚动。
是否有一个简单的公式来更准确地计算新的dx和dy,因此如果球在碰撞时几乎平行于斜坡行进,它的速度会比垂直碰撞时的速度慢。
不发布我的任何代码的道歉,我离开了我的电脑,所以如果这有助于任何人的理解,可以稍后发布。
感谢您提前提供任何帮助。
答案 0 :(得分:2)
恢复系数与碰撞物体的相对弹性有关。这是一种简单的方式来解释球和表面在撞击时都会变形的事实。变形的一些能量会消失(例如产生的热量,声波等),但大部分会变回“推动”另一个身体。
如果恢复系数等于1.0,则没有能量损失。将其视为“软糖因素”,因此您不必进行动态弹性问题。
滚动是另一回事。
我认为恢复系数应仅适用于速度的正常分量。如果你想更接近真实物理,摩擦和滑动必须适用于切向分量。
除了x,y方向的位移之外,你还需要另一个方程式。你需要另一个关于围绕球的质心的z轴扭矩。
牛顿的运动方程将在x和y方向上求和力,并为球的z轴求矩。
答案 1 :(得分:0)
我可能错了,但解决这个问题的方法是计算球的角度,意思是artan(dy / dx)。
将此角度与您的原点相对应,您可以乘以该角度的余弦值。如果它完全平行,速度将保持不变,如果完全垂直,速度将为零。
你必须考虑到这一点,以确保你想让球反弹的最小和最大速度。
希望它有所帮助!
答案 2 :(得分:0)
你最好的选择可能是参考工程或物理教科书。我快速谷歌搜索了“coefficient of restitution oblique impact”,它产生了这个Scribd文档,其中包含一些有用的信息:http://www.scribd.com/doc/28272448/46/Coefficient-of-restitution