返回1和360之间的值

问题描述 投票:0回答:1

我设置了一个函数来返回四元数旋转中使用的值。但是,当我的结果小于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)
c++ math rotation trigonometry quaternions
1个回答
0
投票

您传递给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;
}


© www.soinside.com 2019 - 2024. All rights reserved.