2017-05-10 5 views
1

행렬을 쿼터니언으로 변환하기 위해 고유 라이브러리를 사용합니다. 그러나 행렬 중 하나를 쿼터니언으로 변환하고 다시 태울 때 항등 행렬 인 다른 행렬로 나타납니다. 내가 사용하는 회전 행렬은 변환 행렬에서 분해되었습니다.고유 : 행렬과 쿼터니언의 결과가 다릅니다.

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

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

이 문제점의 원인은 무엇입니까?

+0

전달중인 행렬이 리플렉션이므로 유효한 쿼터니언을 가져올 수 없습니다. 그럼에도 불구하고 어떤 버전의 Eigen을 사용하고 있습니까? – chtz

+0

Eigen 3을 사용하고 있습니다 – JOYD

+0

그래서 버전 3.0입니까? 잠시 사용하지 않으려 고합니다 ... – chtz

답변

0

This is the matrix before change to quaternion

This is the matrix when I turn it back form the quaternion 그냥 Eigen's matrix to quaternion conversion의 구현을 확인. Ken Shoemake의 "Quaternion Calculus and Fast Animation"을 기반으로합니다.

원본을 분석 할 때 알 수 있듯이이 행렬은 실제로 회전 행렬 (또는 하나에 근접한 행렬)이라고 가정합니다. 실제로 M.trace()>0을 가진 모든 대칭 행렬은 (스케일 된) 신원 쿼터니온을 초래할 것입니다. 유효하지 않은 회전 행렬에 대한 다른 사항이 필요하면 직접 변환 메소드를 구현해야합니다.

관련 문제