c++ - 零四元数和任何 vector 的特征积不为零,这是一个错误吗?

标签 c++ eigen quaternions

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

相关文章:

c++ - 检查链接列表是否是回文

C++ 静态全局对象解决方法?

c++ - 逐元素矩阵乘法 : R versus Rcpp (How to speed this code up? )

c++ - 有没有办法从 ordered_index ed multi_index 移动元素?

c++ - 在实时环境中使用 C++ 预分配内存

c++ - Eigen Sparse LU 求解器返回值

c++ - 使用 Eigen 过滤球体内的点

java - 如何将 AR 对象旋转到位?

opengl - 你如何使用glm quat防止万向节锁定

c++ - 为什么我的相机围绕这个数学点旋转?