【发布时间】:2020-04-13 18:58:13
【问题描述】:
我有一个函数设置为返回一个在 Quaternin Rotation 中使用的值。但是,当我的 reslt 小于 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 或非常接近 360”时,你不会遇到问题;那是
angle,不管是什么,都有一定的价值。编写你能想出的最小的程序来编译和运行并显示问题。 -
注意
acos的输入不能是角度,而是-1到1之间的余弦值 -
您的问题可能来自
angle = 1.000001,带有任何 +/- 符号 -
将此行添加到您的代码
static_assert(angle > 1.0 || angle < -1.0, "Wrong angle input"); -
如果您不希望这样做会失败,将值限制为 -1.0 或 1.0 可能更有意义,否则您将需要来自
的常规 assert(angle > 1.0 || angle < -1.0)。static_assert不起作用,因为angle不是编译时值,它似乎是一个类成员变量。
标签: c++ math rotation trigonometry quaternions