2017-05-10 10 views
1

行列をクォータニオンに変換するために固有ライブラリを使用しますが、行列の1つを四元数に変換して焼き戻すと、単位行列である別の行列になります。使用する回転行列は、変換行列から分解されました。固有ベクトル:四元数と行列の結果が異なる

Eigen::Matrix3f R3d = R.topLeftCorner<3,3>(); 
    *Rquat = R3d; 

    R3d = (*Rquat).normalized().toRotationMatrix(); 

この問題の原因は何ですか? This is the matrix before change to quaternion

This is the matrix when I turn it back form the quaternion

+0

あなたが渡している行列は反射ですので、有効な四元数を取り出すことはできません。それにもかかわらず、どのバージョンのEigenを使用していますか? – chtz

+0

私はEigen 3を使用しています – JOYD

+0

だからバージョン3.0?それはしばらくの間廃止されました... – chtz

答えて

0

だけEigen's matrix to quaternion conversionの実装を確認しました。これは、Shoemake Kenの "Quaternion Calculus and Fast Animation"に基づいています。

ソースを分析するときにわかるように、これは、行列が実際に回転行列(または1に近い)であることを前提としています。実際、M.trace()>0のすべての対称行列は、(スケーリングされた)アイデンティティ四元数をもたらす。無効な回転行列について他のものが必要な場合は、独自の変換方法を実装する必要があります。

関連する問題