2

几乎每个游戏都倾向于使用一些游戏循环。Gafferongames 有一篇关于如何制作精心设计的游戏循环的精彩文章:http: //gafferongames.com/game-physics/fix-your-timestep/

在他的代码中,他使用integrate( state, t, deltaTime );,我认为state其中包含对象的位置、速度和加速度。他使用 RK4 将其从 集成tt+deltaTime

我的问题是,当您可以使用运动学方程(此处)找到精确值时,为什么要使用像 RK4 这样的数值积分技术?

这些方程在加速度恒定时起作用。您似乎很少会在一个时间步长内获得不断变化的加速度。看起来 RK4 是一种性能较低、精度较低、更复杂的解决方案。

编辑:如果你真的想的话,我认为你可以为对象添加一个“jerk”值,并且仍然可以找到加速度、速度和位移的精确表达式。

编辑2:好吧,我没有仔细阅读他的“集成基础”文章。我认为他正在模拟一个阻尼器和弹簧,这确实会在一个时间步内导致非恒定加速度。

4

2 回答 2

6

一旦你添加了许多游戏设计师想要的东西,比如(速度相关的)阻力、位置相关的力等,方程就不再是完全可解的了。

所以,如果你愿意将你的力量限制在运动学方程可以处理的范围内,那就去吧。如果你想要一些灵活的东西,那么数值积分是唯一的方法。

注意:如果您在一段时间内将力视为恒定,而它们并不是真正恒定的 - 那么您实际上是在使用一种数值积分形式。它也是一种不准确的整合形式。那么为什么不使用经过验证的数值方法呢?RK4 是许多此类方法之一。

于 2012-03-28T11:10:58.417 回答
2

在一个时间步长内将加速度(实际上是导数)近似为常数是数值积分方法的工作原理。当导数不是常数时,您需要考虑通过将它们视为常数来引入什么样的错误。

想象一下将时间范围T分成N宽度相等的步长h=T/N。现在逐步积分动力学方程。使用 RK4,每一步的局部误差O(h^5)给出的全局误差为O(h^4).

使用您提出的运动学方程,我们可以通过考虑位置的泰勒展开来评估误差,保持项为二阶。该位置将O(h^3)在每一步引入错误,对应于您截断扩展的位置。这给出了局部错误O(h^3)和全局错误O(h^2)

基于渐近误差,RK4 的误差比运动方程更快地变为零。它更准确。RK4 在需要完成的功能评估次数上获得了非常好的准确度。

于 2012-03-28T11:40:33.357 回答