Eigen::Matrix4d transformation_matrix; //assume this is initialized
Eigen::Matrix4d &matrix = transformation_matrix;
Eigen::Quaterniond quat;
quat(matrix);
我正在尝试从变换矩阵中找到旋转矩阵。 Eigen :: Quaterniond库toRotationMatrix中已经有一个API。但是要使用此功能,我需要4x4四元数(如果错误,请更正)。
获取编译错误为错误:与“(Eigen :: Quaterniond {aka Eigen :: Quaternion})(const Matrix4d&)”的调用不匹配]
请帮助。Followed this link for conversion
Eigen::Quaterniond quat;
quat(matrix);
在初始化四元数时,出现了另一个错误:
Eigen :: internal :: quaternionbase_assign_impl,4,4>”用于嵌套名称说明符内部的:: quaternionbase_assign_impl :: run(* this,xpr.derived());
您的代码存在一些问题。首先,这:
Eigen::Matrix4d &matrix;
是对Eigen::Matrix4d
的未初始化引用。拆下&
。其次,您在这里做什么:
Eigen::Quaterniond quat;
quat(matrix);
正在创建四元数,然后使用矩阵将其称为operator()
。但据我所知,四元数甚至没有任何内容的operator()
:documentation
看看question you referred to中ggael的第一个答案。您可以使用四元数的构造函数:
Eigen::Quaterniond quat(matrix);
或者它是赋值运算符:
Eigen::Quaterniond quat;
quat = matrix;
两者都为矩阵定义。但是,我无法告诉您它们是否适用于4x4矩阵。如果未提取,则提取矩阵的3x3旋转部分。
编辑:
在计算机上进行快速测试后,您无法将4x4矩阵传递给四元数。请改用Eigen::Matrix3d
或执行以下操作:
Eigen::Quaterniond quat(Eigen::Matrix3d(matrix.topLeftCorner(0, 0)));