0

問題が発生しました。検索して調査しましたが、これを理解できません。

私は宇宙ゲームを作っていて、プレイヤーに船の向きを合わせさせ、船をスムーズに回転させたいと思っています。そのため、船の回転速度は増加してから減少し、目標を超えないようにします。

SUVATなどを調べましたが、うまくいきません。

私が扱わなければならない価値は

  • 船の角度
  • 船の希望角度
  • 船の回転速度
  • 船の回転速度を上げることができる率

したがって、船が角度 0 にあり、角度 90 に向けたい場合、角度 45 まで回転速度を上げ、角度 45 で回転速度を下げ始めるので、角度 90 に達すると回転速度が停止します。

船がどちらの方向に回転する必要があるか (時計回り/反時計回り) に応じて、回転速度が正または負になる可能性があることに注意してください。

誰でも私を助けることができますか?

4

2 に答える 2

0

船の回転速度が増減できる最大値がある場合、プレイヤーが別のターゲットに向かって移動しているときにターゲットを変更すると、プレイヤーが設定したターゲットのオーバーシュートを防ぐことはできません。ただし、できることは、現在の速度を、ゼロ速度で(つまり、オーバーシュートせずに)できるだけ速く最終目標に到達するように調整することです。最適制御の問題を解決するための一般的な方法については、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のエイリアスを選択できます。

于 2012-06-17T20:48:28.520 に答える
0

船の回転率は半分の時間で増加し、残りの半分の時間で減少します。最初に中間点を決定できます: half = abs(desiredAngle - startAngle). (絶対値により、これは正と負の両方の値で機能します) 回転を開始する前にこれを計算します。次に、更新ループで、回転した量を計算します。currentChange = abs(currentAngle - startAngle);回転速度を計算するには、rotationSpeed += (currentChange > half) ? -rate : rate;ただし、この方法を使用すると、目的の角度をわずかに下回ったり上回ったりする場合があります。これを修正するには、最終角度の特定の (小さい) しきい値内にあるかどうかを確認し、現在の角度を目的の角度に設定し、回転速度をゼロに設定します。

于 2012-06-17T04:02:06.650 に答える