将X和Y速度缩放到C 中的-max和Max之间

Scale x and y velocities to between -MAX and MAX in c++

本文关键字:中的 -max Max 之间 缩放 速度      更新时间:2023-10-16

我试图在-max和max之间扩展一些x和y速度值并保持其比例。数字可以为负,零或正。这被用于对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;

这并不是真的有效,我正在应用的机器人正在激起。是否有一个标准方法可以实现这一目标?

谢谢。

要归一化向量,您不应将其组件除以其中任何一个的最大值,而应以其大小为矢量的欧几里得范围。

实际上,您不应该检查单个组件,首先您计算幅度,然后如果超过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;
}