我想模拟自由落体和与地面的碰撞(例如弹跳球)。物体会落入真空中 - 可以省略空气阻力。与地面的碰撞会导致一些能量损失,最终物体会停止移动。我使用JOGL渲染一个点,这是我的下降对象。重力恒定(-9.8 m/s^2)。重力模拟
我发现了一个欧拉法计算该点的新位置:
deltaTime = currentTime - previousTime;
vel += acc * deltaTime;
pos += vel * deltaTime;
,但我做错了什么。点反弹几次,然后它下移(非常慢)。
这里是一个伪代码(初始POS =(0.0F,2.0F,0.0F),初始电平(0.0F,0.0F,0.0F),比重= -9.8f):
display()
{
calculateDeltaTime();
velocity.y += gravity * deltaTime;
pos.y += velocity.y * deltaTime;
if(pos.y < -2.0f) //a collision with the ground
{
velocity.y = velocity.y * energyLoss * -1.0f;
}
}
达到现实效果的最佳方式是什么?欧拉方法如何引用恒定加速度方程?
如果您仅将能量损失排除在等式之外,会发生什么情况? – redbmk
除了Yochai的回答,你可以考虑在你的碰撞情况下将'pos.y'设置为地平面以避免削波错误 –
如果没有能量损失,该点也会在一段时间后停止反弹,并且它非常缓慢地向下移动。 – Vert