2012-12-19 2 views
5

Eigen 라이브러리를 사용하여 아핀 변환을 등각 변환 (즉, 회전 및 변환만으로 구성)으로 변환하는 가장 간단한 방법은 무엇입니까?Eigen affine 변환을 Eigen isometry 변환으로 변환

두 변형은 모두 3D입니다. 아핀 메트릭스는 좌측 상부 사분면에 대한 일반적인 3x3 행렬 (즉, 회전, 스케일링 및 전단)을 가지지 만, 등각 투영은 동일한 사분면에 대해 3x3 회전 행렬을 가지므로 투영이 요구된다.

error C2338: YOU_PERFORMED_AN_INVALID_TRANSFORMATION_CONVERSION

Eigen::AffineCompact3f a; 
Eigen::Isometry3f b(a.rotation(), a.translation()); 

(line 2) error C2661: 'Eigen::Transform<_Scalar,_Dim,_Mode>::Transform' : no overloaded function takes 2 arguments

을 제공

동안 :
Eigen::AffineCompact3f a; 
Eigen::Isometry3f b(a); 

은 컴파일 오류를 제공합니다
Eigen::AffineCompact3f a; 
Eigen::Isometry3f b; 
b.translation() = a.translation(); 
b.rotation() = a.rotation(); 

는 질문으로 다시 표현 될 수있다() 함수를 감안할 때 회전()와 번역을

(line 4) error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const Eigen::Matrix<_Scalar,_Rows,_Cols>' (or there is no acceptable conversion)

을 준다 "나는 가장 등각의 회전 및 변환 구성 요소 변환을 어떻게 설정합니까?"

+0

표준 C++ 유형이나 이름이 아니므로 사용중인 라이브러리 또는 툴킷을 지정해야합니다. – abelenky

+2

제목과 텍스트에 명시된대로 Eigen (잘 알려진 C++ 수학 라이브러리)을 사용하고 있습니다. 더 명확하게하기 위해 링크를 추가하겠습니다. – user664303

답변

5

. 회전() 변환의 회전 부분을 추출합니다. SVD가 포함되어 있으므로 읽기 전용입니다. 왼쪽에, 당신은) (.linear 사용해야합니다 :

Eigen::AffineCompact3f a; 
Eigen::Isometry3f b; 
b.translation() = a.translation(); 
b.linear() = a.rotation(); 

당신 '이'는 등거리 변환 것을 알고있는 경우와 만 등거리 변환 층에 캐스팅 할, 당신은 간단하게 수행 할 수 있습니다

b = a.matrix(); 
관련 문제