【问题标题】:How to normalize an angle between -π and π Java [duplicate]如何标准化 -π 和 π Java 之间的角度
【发布时间】:2015-05-08 16:02:51
【问题描述】:

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

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;

【问题讨论】:

标签: java android libgdx normalize radians


【解决方案1】:

在您编写的第一个代码 sn-p 中

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

这表示“如果name.angle 太大,则将其变大”。我通过将+= 更改为-= (并在下一位将-= 更改为+=)解决了这个问题。我还用while 替换了if。这样,如果初始角度过大/过小超过 2 pi,它仍然可以工作。正确的代码是:

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));除此之外,我只是将精灵设置为插值旋转和位置。我尝试将精灵的原点设置为中心,但这并没有改变任何东西。
猜你喜欢
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-03
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
相关资源
最近更新 更多