数字融合,Runge-Kutta,RK4在游戏设计中

时间:2012-03-28 05:28:43

标签: math physics game-physics numerical-integration

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

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

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

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

编辑:我认为您可以为对象添加“加加速度”值,如果您真的想要,仍然可以找到加速度,速度和位移的精确表达式。

编辑2:嗯,我没有仔细阅读他的“整合基础知识”文章。我认为他正在对阻尼器和弹簧进行建模,这会在一个时间步长内造成非恒定的加速度。

2 个答案:

答案 0 :(得分:6)

只要你添加许多游戏设计师想要的东西,比如(速度相关的)拖拽,位置相关的力等等,这些方程式就不再是精确可解的。

所以,如果你很乐意将你的力量限制在运动方程可以处理的那些力量上,那就去吧。如果你想要灵活的东西,那么数值整合是唯一的出路。

注意:如果你将力量在一个时间间隔内保持不变,当它们不是真正恒定时 - 那么你实际上是在使用一种数值积分形式。这也是一种不准确的整合形式。那么为什么不使用经过验证的数值方法呢? RK4是许多此类方法中的一种。

答案 1 :(得分:2)

在一个时间步长内将加速度(衍生物,实际)近似为常数是数值积分方法的工作原理。当导数不是常数时,你需要考虑通过将它们视为常数而引入的错误类型。

想象一下,将时间范围T分成N等宽的宽度h=T/N。现在逐步整合动力学方程。使用RK4时,每步的本地错误为O(h^5),全局错误为O(h^4)

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

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