船の回転速度が増減できる最大値がある場合、プレイヤーが別のターゲットに向かって移動しているときにターゲットを変更すると、プレイヤーが設定したターゲットのオーバーシュートを防ぐことはできません。ただし、できることは、現在の速度を、ゼロ速度で(つまり、オーバーシュートせずに)できるだけ速く最終目標に到達するように調整することです。最適制御の問題を解決するための一般的な方法については、http://en.wikipedia.org/wiki/Optimal_controlを参照してください。最適制御には、通常、常にフルスラストで加速/減速することが含まれます(目標に到達するまで)。
この問題を解決するには、新しいコマンドが与えられた瞬間の現在の角度をCで表し、ターゲットの角度をTで表します。新しいターゲットを受け取った瞬間の角速度をV'で表し、最大加速度をMで表します。 。正のVは時計回りに回転し、負のVは反時計回りに移動することに対応します。
初期角速度が0より大きい(V'> 0)とすると、Tに到達する可能性は2つあります。
1)Vを期間Uだけ増加させてから、ゼロになるまで減少させます。次に、最終的な角度は次のようになります(速度と時間の図を描き、検証する領域を決定します)。
C+ V'^2/(2 M) + 2U*V' + M U^2
U(ABC式)を見つけるには、これをTと同等にする必要があります。ただし、解が得られない場合(負の判別式)、オプション2)で解が得られる場合を除きます。
2)しばらくの間Vを下げ、最終的にVの符号を変更してから、ゼロになるまでVを上げます。絵を描くと次のようになります。
C+ V^2/(2 M) - M U^2.
Tに等しいとUが得られます。
それらは、オプション1)または2)が解決策を与えるかどうかを決定する非常に単純な条件であることがわかります。
初速度V'<0が類似している場合(1と2、そしておそらくいくつかの兆候が反転します)。繰り返しますが、混乱した場合に備えて絵を描いてください。
ここには微妙なことがいくつかあります。T'になりたい場合は、T' + K 360度(/ 2 piラジアン)でもかまいません(24時間完全に移動できる場合)。したがって、実際に最も簡単にアクセスできるTのエイリアスを選択できます。