2013-04-29 1 views
3

J'ai un tampon contenant N points 3D stocké comme [XYZXYZXYZ ... XYZ].Convertir un vecteur de point 3D en représentation homogène dans Eigen

Ce tampon peut être mappé directement à un Eigen::Matrix<float, 3, N> en utilisant Eigen :: Map. Comme je vais transformer les points en utilisant des transformations affines (ie Eigen::Matrix4f matrices) je voudrais mapper le même tampon à une structure propre qui me permet de considérer le tampon comme une matrice Eigen::Matrix<float, 4, N> où la dernière rangée ne contient que 1s, ie chaque point est représenté par le vecteur homogène [XYZ 1].

est-il un moyen pratique de le faire sans copier le tampon d'origine ou appliquer la transformation sur chaque point?

Répondre

3

Vous pouvez appliquer homogenous() sur chaque colonne comme ceci:

mat * Map<Matrix<float, 3, Dynamic> >(data,3,N).colwise().homogeneous() 
+0

Merci, cela ne fait le travail. Il me manquait l'opération de diffusion colwise. Pour clarifier la réponse: prenez la matrice et considérez-la comme une collection de vecteurs de colonne (colwise), puis appliquez une forme homogène à chaque colonne vecotrs. – Pierluigi

Questions connexes