どのようにして車両をポイントに移動させ、行き過ぎたり振動したりせずに停止しますか?


9

では、この質問に対する私の回答で説明したような、2Dの位置、速度、角速度、および抗力/摩擦を備えた車両があるとします。それは加速し、可変の量で壊すことができますが、すぐに完全に停止したり、すぐに最高速度に達したりすることはできません。オーバーシュートや振動なしに、特定のポイントに移動して停止させるにはどうすればよいですか?

私は次のようなことを考えていました:

  • 目標位置に向けます。
  • 加速する
  • 1ティック先を見て、「次のティックにブレークを適用した場合、ターゲットをオーバーシュートしますか?」と尋ねます。
  • オーバーシュートする場合は、ここである程度の間隔をあけてください。

これは解決された問題であり、おそらく私が説明した方法よりも優れた方法があるでしょう。

回答:



3

微積分を使用すると、速度と最大減速率がわかっていれば、最小停止距離を知ることができます。これを念頭に置くと、特定のポイントで停止するためにブレーキ(丸め/量子化エラーは別)を適用する必要があるときを正確に知ることができます。

うまくいけば、私よりも数学が得意な人が実際の数式を投稿してくれるといいのですが...


2
finalPositionDelta = -0.5 * sqr(currentSpeed) / maximumDecelerationただし、これは、減速度が一定であることを前提としています。シミュレーションの深度によっては、そうでない場合があります。私はラニエリの解決策を使います。(申し訳ありませんが、mulではなくDIV減速です)
tenpn

ええ、この方法は、制御システムの問題としてフレーム化したとしても有用です。関係する勾配を理解することで、エラー測定の不安定性や振動を回避できるからです。
カイロタン2010


1

ゲーム開発では、近道をする必要がある場合があります。ここでのショートカットはインパルスと呼ばれ、物理的に言えば、非常に短い時間で加えられる非常に大きな力です。時間をかけて積分するのではなく、直接変更としてパラメーターに適用するだけです。速度を0に設定します。

問題は、ショートカットを使用するかどうかです。


2
プレイヤーから見えなくてもショートカットをすることは心配していませんが、車両がその場で止まってしまうと非常に奇妙に見えます。
Iain

1
これは確かに本当ですが、減速後の正確なタイミングで停止することにより、複雑な計算を避け、タイムステップの分割を何度も繰り返す必要がなくなります。
ADB
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.