首页 > 解决方案 > 零四元数和任何向量的特征积都不为零,这是一个错误吗?

问题描述

我正在使用 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;

干杯和感谢。

标签: c++eigenquaternions

解决方案


我不得不承认这个文档operator*不是很清楚,但它在语义上等同于:

q.toRotationMatrix() * v

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

有关更多详细信息和讨论,请参阅错误 560


推荐阅读