gpt4 book ai didi

c++ - Eigen::Quaternion FromTwoVectors() 不返回有效的四元数

转载 作者:行者123 更新时间:2023-11-30 02:14:27 35 4
gpt4 key购买 nike

我在 3D 空间中有两个 vector ,我正在尝试使用 Eigen::Quaternion FromTwoVectors() 的函数来计算它们之间的旋转。尽管这个问题没有唯一的解决方案,但我得到了一个几乎有 4 个零值的四元数(可能只是数值错误)例如:6.95251e-310、6.90758e-310、9.88131e-324, 6.90758e-310。这肯定不是一个有效的四元数。

Eigen::Vector3d normal1;
Eigen::Vector3d normal2;
Eigen::Quaterniond quat;
quat.FromTwoVectors(normal1, normal2);
std::cout << quat.x() << quat.y() << quat.z() << quat.w() << std::endl;

使用相同的 vector 计算 AngleAxis 然后转换为四元数给出有效值:

Eigen::Vector3d axis = normal1.cross(normal2);
axis.normalize()
double angle = acos(normal1.dot(normal2));
Eigen::AngleAxisd aa(angle,axis);
Eigen::Quaterniond quat(aa);
std::cout << quat.x() << quat.y() << quat.z() << quat.w() << std::endl;

0.000407447、0.00621866、0.0035146、0.999974

这里出了什么问题?

最佳答案

请参阅 FromTwoVectors 的文档 https://eigen.tuxfamily.org/dox/classEigen_1_1Quaternion.html#title13

FromTwoVectors 似乎是一个静态方法。所以需要看返回值。如果您尝试 Eigen::Quaterniond out = Eigen::Quaterniond::FromTwoVectors(normal1, normal2),您应该会得到正确答案。

关于c++ - Eigen::Quaternion FromTwoVectors() 不返回有效的四元数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57982427/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com