为什么整合过度积累?
我开始学习如何进行DIY物理学,并且我有一个关于在最基本的层面上实现集成的问题(即,这不是 Euler vs. RK4问题)。 我遇到的几乎每个示例都具有一些integrate()功能,该功能获取自上次更新以来的时间步长,并自上次更新以来更新加速度(和/或速度和/或位置)。 最简单的形式: position += velocity * deltaTime 但是,我不明白为什么通过更改功能就可以很容易地获得这样的积累。例如:getPosition = makeNewFunction()可以返回带有签名的东西Time -> Position,并且该函数的内部工作是通过适当的数学公式生成的。 这样,就没有积累……只要需要获取位置,它就会在当前时间调用该函数。 我的新手理解是,这样做还可以避免由于累积而产生的错误……那为什么不起作用,我还缺少什么? (之前我确实整理了这个想法的基本概念证明,尽管它同时也在测试其他一些东西,所以它不是最干净的例子:https : //github.com/dakom/ball-bounce-frp) 编辑1:如评论中所述,可能很重要的一点是要指出,我还没有学会改变加速度,或者处理急动和其他需要比恒定加速度更高阶积分的事情。 编辑2:这是该思想的一些基本示例代码,以及伪javascript语法-注意,getKinematicPosition由于部分应用,因此它返回的只是时间->位置的新功能: 我会坚持在这里工作,但可能还有其他原因,例如getVelocity,我想... getKinematicPosition = initialVelocity => acceleration => time => ((.5 *acceleration) * (time * time)) + (initialVelocity * time); getPosition = getKinematicPosition ([0,0,0]) (GRAVITY); onTick = totalTime …