我正在使用Eigen 3.3.7及其四元数对一组 vector 执行转换。

我需要用 vector 执行四元数(可能是零四元数)的乘积。问题在于,当四元数为零四元数(零实数和 vector 部分)时,返回的值就是 vector 本身。

我对汉密尔顿积定义的理解是,如果四元数是零四元数,则乘积应返回零 vector 。我错了吗?

以下代码段显示了该问题,我期望 vector 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* 的文档并不十分清晰,但在语义上等效于:

q.toRotationMatrix() * v

因为Eigen::Quaternion设计为仅表示旋转。在您的情况下,由于空四元数q不是单一的,因此它不表示任何旋转,并且返回值是不确定的。

有关更多详细信息和讨论,请参见bug 560

关于c++ - 四元数为零且 vector 为零的 Eigen 积,这是一个错误吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59739235/

10-13 08:28