如何规范化-π和πJava之间的角度

时间:2015-03-06 23:02:19

标签: java android libgdx normalize radians

我遇到了一个标准化的漂浮物以平滑地旋转一些精灵的麻烦。我使用插值来旋转我的精灵。在旋转的某个点,精灵每次都会在同一个点跳跃。

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;

1 个答案:

答案 0 :(得分:3)

在您编写的第一个代码段中

if (name.angle > Math.PI)
    name.angle += 2 * Math.PI;

这说&#34;如果name.angle太大,那么就把它做得更大&#34;。我已将此修改为+=更改为-=(并在下一位将-=更改为+=)。我还将if替换为while。这样,如果初始角度大于2 pi太大/太小,它仍然可以工作。正确的代码是:

double pi = Math.PI;
while (angle > pi)
    angle -= 2 * pi;
while (angle < -pi)
    angle += 2 * pi;