我正在使用 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 的特征积不为零,这是一个错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59739235/