如何归一化 -π 和 π 之间的角度 Java
How to normalize an angle between -π and π Java
我在获取规范化的浮点数来平滑地旋转一些精灵时遇到了问题。我正在使用插值来旋转我的精灵。在旋转的某个点,精灵会跳跃,每次都在同一个点。
name.angle = (name.getBody().getTransform().getRotation() * alpha + name.prevAngle * (1.0f - alpha));
我在网上查看并找到了几种方法来标准化 -pi 和 +pi 之间的角度,但我无法让它们在我的情况下工作。
以下无效
if (name.angle > Math.PI)
name.angle += 2 * Math.PI;
else if (name.angle < -Math.PI)
name.angle -= 2 * Math.PI;
以下确实有效
name.angle = name.angle < 0 ? MathUtils.PI2 - (-name.angle % MathUtils.PI2) : name.angle % MathUtils.PI2;
在您编写的第一个代码片段中
if (name.angle > Math.PI)
name.angle += 2 * Math.PI;
这表示 "if name.angle
is too big, make it bigger"。我已通过将 +=
更改为 -=
(并在下一位中将 -=
更改为 +=
来解决此问题)。我还将 if
替换为 while
。这样,如果初始角度也超过 2 pi big/small,它仍然可以工作。正确的代码是:
double pi = Math.PI;
while (angle > pi)
angle -= 2 * pi;
while (angle < -pi)
angle += 2 * pi;
我在获取规范化的浮点数来平滑地旋转一些精灵时遇到了问题。我正在使用插值来旋转我的精灵。在旋转的某个点,精灵会跳跃,每次都在同一个点。
name.angle = (name.getBody().getTransform().getRotation() * alpha + name.prevAngle * (1.0f - alpha));
我在网上查看并找到了几种方法来标准化 -pi 和 +pi 之间的角度,但我无法让它们在我的情况下工作。
以下无效
if (name.angle > Math.PI)
name.angle += 2 * Math.PI;
else if (name.angle < -Math.PI)
name.angle -= 2 * Math.PI;
以下确实有效
name.angle = name.angle < 0 ? MathUtils.PI2 - (-name.angle % MathUtils.PI2) : name.angle % MathUtils.PI2;
在您编写的第一个代码片段中
if (name.angle > Math.PI)
name.angle += 2 * Math.PI;
这表示 "if name.angle
is too big, make it bigger"。我已通过将 +=
更改为 -=
(并在下一位中将 -=
更改为 +=
来解决此问题)。我还将 if
替换为 while
。这样,如果初始角度也超过 2 pi big/small,它仍然可以工作。正确的代码是:
double pi = Math.PI;
while (angle > pi)
angle -= 2 * pi;
while (angle < -pi)
angle += 2 * pi;