1

x と y の速度値を -MAX と MAX の間にスケーリングし、それらの比率を維持しようとしています。数値は、負、ゼロ、または正のいずれかです。これは、x 速度と y 速度に速度制限を適用するために使用されています。これが私が持っているものです:

if(abs(velocities.x) <= MAX_TRANSLATIONAL_VELOCITY && abs(velocities.y) <= MAX_TRANSLATIONAL_VELOCITY)
    return;

float higher = max(abs(velocities.x), abs(velocities.y));

velocities.x = (velocities.x / higher) * MAX_TRANSLATIONAL_VELOCITY;
velocities.y = (velocities.y / higher) * MAX_TRANSLATIONAL_VELOCITY;

これは実際には機能しておらず、私がこれを適用しているロボットは飛び散っています。これを達成する標準的な方法はありますか?

ありがとう。

4

1 に答える 1

2

ベクトルを正規化するには、その成分を最大値で割るのではなく、ベクトルのユークリッド ノルムである大きさで割るべきです。

実際には、単一のコンポーネントをチェックするべきではありません。最初にマグニチュードを計算し、MAX_MAGNITUDE を超えている場合は、ベクトルを正規化し、MAX_MAGNITUDE を掛けます。

float magnitude = sqrt(v.x*v.x + v.y*v.y);

if (magnitude > MAX_MAGNITUDE)
{
  v /= magnitude; // I'm assuming overloaded operators here
  v *= MAX_MAGNITUDE;
}
于 2012-10-21T21:15:17.843 に答える