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 回答