如何使车辆移至某个点并停止而不会超调或振荡?


9

好的,所以考虑一下我们有一个我在回答这个问题时所描述的车辆,它具有2D位置,速度,角速度和阻力/摩擦力。它可以加速和断裂,但不会立即停止死亡或立即达到最高速度。如何使它移动到特定点并在可能的最快时间内停止而不会出现过冲或振荡?

我在想类似的东西:

  • 转向目标位置。
  • 加速
  • 向前看1个滴答声,问“如果我在下一个滴答声中应用了间隔,我是否会超出目标?”
  • 如果过冲,请立即应用一些间隔。

我确定这是一个已解决的问题,并且可能有比我描述的方法更好的方法。

Answers:



3

使用微积分,如果您知道自己的速度和最大减速度,那么您就可以知道您的最小停止距离。考虑到这一点,您可以确切地知道何时需要制动(停止舍入/量化误差)以停止在特定点。

现在,希望数学方面比我更好的人会发布实际公式...


2
finalPositionDelta = -0.5 * sqr(currentSpeed) / maximumDeceleration但是,这假设您的减速度是一个常数,但取决于模拟深度的情况可能并非如此。我会选择拉涅利的解决方案。(对不起,这是DIV减速,不是
倍增

是的,即使将其设计为控制系统问题,该方法仍然有用,因为了解所涉及的梯度应有助于避免误差测量中的不稳定性或振荡。
Kylotan


1

有时,在游戏开发中,您需要采取捷径。这里的捷径称为脉冲,从物理上讲,它是在很短的时间内施加的很大的力。无需随时间对其进行积分,只需将其直接更改应用到参数即可:将力度设置为0。

问题是:您是否要使用快捷方式?


2
如果玩家看不见捷径,我并不担心,但是如果车辆可以当场停下来,那将很奇怪。
伊恩

1
的确是这样,但是在将其延迟到小数点后,它会帮助您精确地停在所需的位置,从而避免了复杂的计算并使时间步长划分过多。
亚行
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.