私の OpenGL Android プロジェクトでステアリング動作の実装に取り組んでいますが、Arrive 動作コードが本来の動作をしない理由を理解するのに少し苦労しています。
更新ループ中に、私のプログラムは、モバイル エージェントの位置を更新するための操舵力を計算します。現在、Targetpos で定義された位置に移動するという点で、「シーク」動作と同じように動作しますが、速度を落としてポイントに近づくと停止するのではなく、前進し続け、ターゲットを何度もオーバーシュートします。また。
以下は、エージェントに適切なステアリング力を返すはずのコードです。
減速は、エージェントが減速する必要がある異なる速度をエンコードする 1 ~ 3 の単なる列挙型です。
private Vector2 Arrive(Vector2 Targetpos, Deceleration deceleration) {
Vector2 ToTarget = sub(Targetpos, agentPos);
//calculate the distance to the target
float dist = ToTarget.len();
if (dist > 0.2f) {
final float DecelerationTweaker = 0.3f;
//calculate the speed required to reach the target given the desired
//deceleration
float speed = dist / ((float) deceleration.value() * DecelerationTweaker);
//make sure the velocity does not exceed the max
speed = Math.min(speed, agentMaxSpeed);
Vector2 DesiredVelocity = mul(ToTarget, speed / dist);
return sub(DesiredVelocity, agentVelocity);
}
return new Vector2(0, 0);
}