Qual è il modo più semplice per convertire una trasformazione affine in una trasformazione isometrica (ovvero consiste solo in una rotazione e una traduzione) utilizzando la libreria Eigen?Conversione di una trasformazione affine Eigen in una trasformazione isometrica Eigen
Entrambe le trasformazioni sono 3D. La matrice affine ha una matrice 3x3 generale (cioè rotazione, ridimensionamento e taglio) per il quadrante in alto a sinistra, mentre l'isometria ha una matrice di rotazione 3x3 per lo stesso quadrante, quindi è necessaria una proiezione.
Eigen::AffineCompact3f a;
Eigen::Isometry3f b(a);
dà l'errore di compilazione:
error C2338: YOU_PERFORMED_AN_INVALID_TRANSFORMATION_CONVERSION
mentre
Eigen::AffineCompact3f a;
Eigen::Isometry3f b(a.rotation(), a.translation());
dà
(line 2) error C2661: 'Eigen::Transform<_Scalar,_Dim,_Mode>::Transform' : no overloaded function takes 2 arguments
e
Eigen::AffineCompact3f a;
Eigen::Isometry3f b;
b.translation() = a.translation();
b.rotation() = a.rotation();
dà
(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)
Data la rotazione() e traduzione() funzioni, la questione può essere riformulato come "Come faccio a meglio regolare i componenti di rotazione e di traduzione di un isometrica trasformano?"
È necessario specificare quale libreria o toolkit si sta utilizzando, poiché questi non sono tipi o nomi C++ standard. – abelenky
Sto usando Eigen (una nota libreria di matematica C++), come ho affermato nel titolo e nel testo. Aggiungerò un link per renderlo più chiaro. – user664303