현재 을 찾고 있는데, typedef Transform<float,3,Isometry> Isometry3f;
으로 정의됩니다.Eigen isometry가 등각 투영법을 유지하는 방법?
따라서 예를 들어, Isometry3f
에 Affine3f
을 할당 할 수 없으므로 isometry를 그대로 유지하는 것이 좋습니다. (그 이유는 Mode
이 Transform
의 할당 연산자에 선택되어 있는지입니다.)
나는 그러나 수 -
Eigen::Isometry3f iso;
iso.setIdentity();
iso(1, 1) = 2; //works (but should not ?!)
을 따라서 등거리 변환을 파괴 - Transform::m_matrix(...)
바로 가기가 Transform::operator(...)
통해.
: Transform::operator(...)
을 허용하지 않거나 경고를 발행해야합니까? 내가 실수로 등거리 변환을 파괴 할 수있다 다른 함정 위치 : 당신이 정말 엉망하려면까지 당신은 여전히
Q2은 ... Transform.matrix()(1,1) = 2
사용할 수 있을까?
: 다른 함정이있는 경우 : Mode==Isometry
의 의도는 무엇입니까? 폐쇄성/안전성을 보장하지 않습니까?
아이겐 (Iigen)이 아이소 메 트리 (Isoometries)를 보존 할 책임이 있다고 생각합니다. 스케일, 전단 및 할당 또는 비등 방성과의 연결을 금지하는 것과 같습니다. 왜 다음 단계를 수행하고 isometry 유형의 변형 객체를 통해 행렬 액세스를 금지합니까? 대안 : 문서에서'Transform'의 문서는'_Mode'가 "변환 유형"이라고 말하고 내부 사용을 - 아마도 잘못된 - 힌트로 언급하지 않기 때문에 힌트라고 절대적으로 분명히하십시오. 어쩌면'TransformTraits' 열거 형을 저장 모드 표시기와 역함수 등에 대한 힌트로 사용해서는 안됩니다. – Thomas
Isometry에 대한 operator() 및 linear() const를 사용자에게 힘들게 만들면 기존 코드가 손상됩니다. 대조적으로, scale/shear와 같은 것을 호출하는 것은 등각 투영에 대해 의미가 없습니다. 그러나 의사가 더 명확하고 그러한 함정에 대해 경고 할 수 있다는 것에 동의합니다. – ggael