【问题标题】:Numerical integration, Runge-Kutta, RK4 in game design游戏设计中的数值积分、Runge-Kutta、RK4
【发布时间】:2012-04-11 16:45:26
【问题描述】:

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

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

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

当加速度恒定时,这些方程有效。您在一个时间步会有变化的加速度似乎很少见。看起来 RK4 是一种性能较低、精度较低、更复杂的解决方案。

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

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

【问题讨论】:

    标签: math physics game-physics numerical-integration


    【解决方案1】:

    一旦您添加了许多游戏设计师想要的东西,例如(取决于速度的)阻力、取决于位置的力等,方程就不再可以精确求解。

    因此,如果您乐于将力限制在运动学方程可以处理的范围内,那就继续吧。如果你想要一些灵活的东西,那么数值积分是唯一的方法。

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2010-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-10
        • 1970-01-01
        • 2018-08-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多