返回介于1和360之间的值

时间:2020-04-13 18:58:13

标签: c++ math rotation trigonometry quaternions

我设置了一个函数来返回Quaternin旋转中使用的值。但是,当我的结果小于1或非常接近360时,我会收到-nan(ind)的结果。有没有一种方法可以返回1和360之间的结论性结果,以避免计算中出现任何错误。谢谢

const float ReturnAngle() const
{
    return (acosf(angle) * 180.0f * 2) / PI;
}

更新:

这些是我对四元套进行旋转变换后检查值时收到的一些结果。

angle: 359.598
angle: -nan(ind)
angle: 357.843


angle: -nan(ind)
angle: -nan(ind)
angle: 0.798189
angle: 2.16383
angle: 1.75475
angle: -nan(ind)

1 个答案:

答案 0 :(得分:1)

您传递给acosf的值超出了允许的-1到1范围。请查看为angle设置值的代码-也许您那里有错误。如果仅是舍入误差,并且angle超出允许的范围小值,则将其“钳位”到有效范围可能是一个好的解决方案。

const float ReturnAngle() const
{
    if (angle < -1f) angle = -1f;
    if (angle > +1f) angle = +1f;
    return (acosf(angle) * 180.0f * 2) / PI;
}