物理 – 重力模拟

我想模拟自由落体和地面碰撞(例如弹跳球).物体将处于真空状态 – 可以省略空气阻力.与地面的碰撞会导致一些能量损失,因此最终物体将停止移动.我使用JOGL渲染一个点,这是我的落物.重力是恒定的(-9.8 m / s ^ 2).

我找到了一个计算点的新位置的欧拉方法:

deltaTime = currentTime - previousTime;
vel += acc * deltaTime;
pos += vel * deltaTime;

但我做错了什么.该点反弹几次然后向下移动(非常慢).

这是一个伪代码(初始pos =(0.0f,2.0f,0.0f),初始vel(0.0f,0.0f,0.0f),gravity = -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;
     }

}

实现真实效果的最佳方法是什么?欧拉方法如何参考恒定加速度方程?

因为漂浮点不会很好地向上舍入,所以你永远不会达到实际为0的速度.你可能得到类似-0.00000000000001之类的东西.

当它足够接近时你需要使它成为0.0. (定义一些delta.)

相关文章
相关标签/搜索