1

私の 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);
    }
4

0 に答える 0