Eigen::Quaternion::FromTwoVectors(a, b) * a != b

Eigen::Quaternion::FromTwoVectors(a, b) * a != b

我正在尝试获取表示从单位向量 a 到单位向量 b 的旋转的四元数。

作为完整性检查,此四元数应保证此等式 q * a = b。本征函数 Quaterniond::FromTwoVector https://eigen.tuxfamily.org/dox/classEigen_1_1Quaternion.html doesn't seem to respect my intuition. You can check here https://godbolt.org/z/rrb3Ev9cf(对于 a = {0, 0, -1} 和 b = {-0.0082091040565241327, 0.15209511189816791, -0.89586970189502269})。

我错过了什么吗?是否存在 a 和 b 必须验证的条件?

用 R 检查:

> crossprod(c(-0.0082091040565241327, 0.15209511189816791, -0.89586970189502269))
          [,1]
[1,] 0.8257828

说明你的向量 b 不是单位向量。