3d 将三维点的矢量转换为特征中的齐次表示

3d 将三维点的矢量转换为特征中的齐次表示,3d,geometry,eigen,homogenous-transformation,3d,Geometry,Eigen,Homogenous Transformation,我有一个包含N个3D点的缓冲区,存储为[xyzxyz…XYZ] 该缓冲区可以使用Eigen::Map直接映射到Eigen::Matrix。 因为我将使用仿射变换来变换点(即 EGEN:Matrix X4F 矩阵),我想把相同的缓冲器映射成一个特征结构,它允许我把缓冲器看作是特征::矩阵< /代码>矩阵,其中最后一行仅包含1s,即每个单点由齐次向量表示。[xyz1] 是否有一种简便的方法可以在不复制原始缓冲区的情况下执行此操作或在每个单点上应用变换?您可以像这样在每个列上应用: Matrix4f

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

该缓冲区可以使用Eigen::Map直接映射到
Eigen::Matrix
。 因为我将使用仿射变换来变换点(即<代码> EGEN:Matrix X4F <代码>矩阵),我想把相同的缓冲器映射成一个特征结构,它允许我把缓冲器看作是<代码>特征::矩阵< /代码>矩阵,其中最后一行仅包含1s,即每个单点由齐次向量表示。[xyz1]

是否有一种简便的方法可以在不复制原始缓冲区的情况下执行此操作或在每个单点上应用变换?

您可以像这样在每个列上应用:

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()
Matrix4f mat=…;//仿射变换存储为4x4矩阵
float*data=…;//将三维点存储为[XYZXYZXYZ…]的原始缓冲区
mat*Map(数据,3,N).colwise().齐次()

谢谢,这确实是我的工作。我错过了科尔韦斯的广播操作。为了澄清答案:取矩阵并把它看作列向量的集合(CouthWy)。在每个列VECoTrs中应用齐次。在哪里,代码> Matt < /C>和<代码>数据< /代码>来自哪里?我有两个帧A和B。我已经生成了旋转矩阵(R)和翻译矩阵(T)。现在如何生成同质转换?我使用C++。非常感谢任何帮助。