在Eigen中将3D点的向量转换为均质表示

Pie*_*igi 5 3d geometry homogenous-transformation eigen

我有一个包含N个3D点的缓冲区,存储为[XYZXYZXYZ ... XYZ]

此缓冲区可以Eigen::Matrix<float, 3, N>使用Eigen :: Map 直接映射到。由于我将使用仿射变换(即Eigen::Matrix4f矩阵)对点进行变换,因此我想将同一缓冲区映射到本征结构,从而使我可以将缓冲区视为Eigen::Matrix<float, 4, N>最后一行仅包含1 的矩阵,即每个单点由齐次向量[XYZ 1]。

有没有一种简便的方法可以执行此操作,而无需复制原始缓冲区对每个单点应用转换

gga*_*ael 6

您可以像这样在每一列上应用homogenous()

Matrix4f mat = ...; // your affine transformation stored as a 4x4 matrix
float *data = ...;  // your raw buffer storing 3D point as [XYZXYZXYZ...]
mat * Map<Matrix<float, 3, Dynamic> >(data,3,N).colwise().homogeneous()
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这确实可以完成工作。我错过了 colwise 的广播操作。澄清答案:取矩阵并将其视为列向量的集合(colwise),然后对每列向量应用同构。 (2认同)