我正在使用Eigen 3.3.7及其四元数对一组向量执行转换。
我需要执行四元数(可能是零四元数)与矢量的乘积。问题在于,当四元数为零四元数(零实数和矢量部分)时,返回的值就是矢量本身。
根据汉密尔顿积定义,我所理解的是,如果四元数是零四元数,则该乘积应返回零矢量。我错了吗?
以下代码段显示了问题,我期望向量sv
为全零,但事实并非如此。这是一个错误吗?
Eigen::Quaterniond q{0.0, 0.0, 0.0, 0.0};
Eigen::Vector3d v{1.0, 2.0, 3.0};
auto sv = q * v;
欢呼和感谢。
我必须承认此operator*
的文档不是很清晰,但在语义上等效于:
operator*
因为q.toRotationMatrix() * v
仅设计为表示旋转。在您的情况下,由于无效四元数Eigen::Quaternion
不为一元,因此它不表示任何旋转,并且返回值是不确定的。
请参阅q
了解更多详细信息和讨论。