c++ - 在 C++ 中将 x 和 y 速度缩放到 -MAX 和 MAX 之间

标签 c++ coordinates velocity max

我试图将一些 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;

这并没有真正发挥作用,我正在应用它的机器人有点令人兴奋。有没有标准的方法来完成这个?

谢谢。

最佳答案

要归一化一个 vector ,您不应该将其分量除以其中的最大值,而应该除以它们的大小,即 euclidean norm。 vector 的。

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

关于c++ - 在 C++ 中将 x 和 y 速度缩放到 -MAX 和 MAX 之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13002230/

相关文章:

c++ - 特征矩阵乘法

c++ - 阵列滚动 2 个骰子

c++ - 可移植可变参数宏

java - 速度模板和 javascript

c++ - 即使在执行流程到达包含 while 的函数结束后,while 循环也会无限执行而无需任何递归调用

python - 程序无法识别 y 值 < 总高度的三分之一

c# - 获取ListView项的子项相对于Form的坐标

android - iOS 和 Android 上的 GPS 位置

javascript - 如何在速度模板的 for 循环内为 div 生成唯一的类名?

swift - Apple 的 Swift Sprite Kit : linearDamping, 这个属性在数学上是如何使用的?