使用Eigen库将仿射变换转换为等距变换(即仅包含旋转和平移)的最简单方法是什么?
两种转换都是 3D 的。仿射矩阵对左上象限有一个一般的 3x3 矩阵(即旋转、缩放和剪切),而等距矩阵对同一象限有一个 3x3 旋转矩阵,因此需要投影。
Eigen::AffineCompact3f a;
Eigen::Isometry3f b(a);
给出编译错误:
错误 C2338:YOU_PERFORMED_AN_INVALID_TRANSFORMATION_CONVERSION
同时
Eigen::AffineCompact3f a;
Eigen::Isometry3f b(a.rotation(), a.translation());
给
(第 2 行)错误 C2661:'Eigen::Transform<_Scalar,_Dim,_Mode>::Transform':没有重载函数需要 2 个参数
和
Eigen::AffineCompact3f a;
Eigen::Isometry3f b;
b.translation() = a.translation();
b.rotation() = a.rotation();
给
(第 4 行)错误 C2678:二进制“=”:未找到采用“const Eigen::Matrix<_Scalar,_Rows,_Cols>”类型的左侧操作数的运算符(或没有可接受的转换)
给定旋转()和平移()函数,问题可以改写为“如何最好地设置等距变换的旋转和平移分量?”