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>' の左側のオペランドを取る演算子が見つかりません (または、受け入れ可能な変換がありません)
rotation() 関数と translation() 関数を考えると、この質問は「等角変換の回転コンポーネントと平行移動コンポーネントを最適に設定するにはどうすればよいですか?」と言い換えることができます。