我正在尝试将一些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;
这并不是真正的工作方式,我正在应用它的机器人令人眼花out乱。有没有标准的方法可以做到这一点?
谢谢。
最佳答案
要对 vector 进行归一化,请勿将其分量除以其中任何一个的最大值,而应除以其大小即 vector 的euclidean norm。
实际上,您不应该检查单个分量,首先要计算幅度,然后如果幅度超过MAX_MAGNITUDE,则对 vector 进行归一化并乘以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;
}