我正在编写一个基于物理的游戏,其中有重力作用于各种物体(如导弹)的行星。(使用 Farseer 物理引擎)
对于主要游戏玩法,我使用具有固定时间步长的单个物理模拟。这一切都很好,效果很好。
这就是问题所在。我正在使用具有更大时间步长的第二个物理模拟器,以便将某些射弹路径投射到未来。基本上是一个包含行星和其他静态的、产生重力的实体的平行宇宙(因为我正在实时运行这些投影模拟,所以它需要快速,因此需要更大的时间步长)。
它产生的结果略有不同。
这是每个时间步执行的基本代码:
Vector2 force = GravityStrength / centerToCenterDist.LengthSquared() / Math.Sqrt(centerToCenterDist.LengthSquared()) * body1.Mass * body2.Mass * centerToCenterDist;
//GravityStrength is in addition to the Mass calculations
我的平行宇宙时间步长目前是(5.0 * 时间步长)。
我试图通过改变结果来纠正不同的结果:
force = (force * (timestep+1))
我的问题:是否可以在并行模拟器中使用不同的时间步来复制主模拟器的结果?
我的数学不是很好,所以我很难通过可能的解决方案来思考这个问题。我猜这是不可能的,因为涉及非线性类型的方程。
如果是这种情况,是否有一种相当准确的方法来获得接近的结果?