我想模擬自由落體和與地面的碰撞(例如彈跳球)。物體會落入真空中 - 可以省略空氣阻力。與地面的碰撞會導致一些能量損失,最終物體會停止移動。我使用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