Преобразовать вектор трехмерной точки в однородное представление в Eigen
У меня есть буфер, содержащий N 3D точек, хранящихся как [XYZXYZXYZ ... XYZ]
,
Этот буфер может быть напрямую сопоставлен с Eigen::Matrix<float, 3, N>
используя Eigen::Map. Поскольку я буду преобразовывать точки с помощью аффинных преобразований (т.е. Eigen::Matrix4f
матрицы) Я хотел бы сопоставить тот же буфер с собственной структурой, которая позволяет мне рассматривать буфер как Eigen::Matrix<float, 4, N>
матрица, в которой последняя строка содержит только 1 с, т.е. каждая отдельная точка представлена однородным вектором [X Y Z 1].
Есть ли удобный способ сделать это без копирования исходного буфера или применения преобразования к каждой отдельной точке?
1 ответ
Решение
Вы можете применить homogenous() к каждому столбцу следующим образом:
mat * Map<Matrix<float, 3, Dynamic> >(data,3,N).colwise().homogeneous()