Преобразовать вектор трехмерной точки в однородное представление в 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()
Другие вопросы по тегам