我正在尝试实现一个在3D空间中获取两个几何向量的函数,并返回一个旋转矩阵,将第一个向量旋转到第二个向量。我的函数目前使用Rodrigues的旋转公式来创建矩阵,但是我对这个公式的实现给出了一些输入的错误答案。我手动检查了数学,得出了一个不正确的结果,我的工作给出了相同的结果。
以下是我的功能代码:
{{1}}
我使用Eigen C ++库进行线性代数(可在此处获得): http://eigen.tuxfamily.org/index.php?title=Main_Page
感谢任何帮助。感谢。
答案 0 :(得分:1)
单线版本包含使用Eigen的四元数:
return Matrix3d(Quaterniond::FromTwoVectors(v0,v1));
答案 1 :(得分:0)
如果你想从一个向量旋转到另一个向量,只需使用内置的“Eigen :: Quaternion :: setFromTwoVectors” http://eigen.tuxfamily.org/dox/classEigen_1_1QuaternionBase.html#ac35460294d855096e9b687cadf821452
它可以更快地完成您的需求和实施。然后你可以打电话 “Eigen :: Quaternion :: toRotationMatrix”,转换为矩阵。这两项行动相对较快,可能比直接罗德里格斯公式更快。</ p>