【发布时间】:2021-10-20 17:35:35
【问题描述】:
我在使用 Eigen3 四元数时遇到了一些奇怪的行为。在我正在开发的应用程序的上下文中,我偶尔会使用两个相同的四元数调用slerp() - 有时就像将实部设为 1 并将所有虚部系数设为 0 一样简单。 slerp() 返回的四元数的所有系数都有 NaN。为了让它更令人沮丧,我写了一个简单的main(),除了操纵类似的四元数之外什么都不做。在那里,slerp() 的行为符合我的预期。
还有其他人遇到过这种情况吗?
在我的应用程序中,我已经求助于测试两个四元数是否通过了isApprox() 测试,如果通过了,则跳过对slerp() 的调用。这可以作为创可贴,但我不喜欢 slerp() 在稍微不同的情况下也会出现类似的行为不端的感觉。
【问题讨论】:
-
您必须在获得 NaN 时隔离案例。例如。记录确切的输入值并在您的简单
main中尝试它们。不要忘记以足够的精度记录以准确再现数字,即使用std::numeric_limits::max_digits10。 -
@Ruslan 我以为我已经做到了,但事实证明我没有。感谢您对我的推动,让我检查了一些假设。
标签: c++ quaternions eigen3