У меня есть массив указателей float
, который представляет данные точек XYZ, которые нужно сохранить в облаке точек. Я знаю, что одним из способов будет l oop через каждое значение и назначить его каждой точке, но есть ли эффективный способ, который может заменить значения XYZ вновь созданного PointCloud массивом указателей float
? Я попытался извлечь Eigen::MatrixXf
для точек облака точек, а затем - массив указателей, но замена этого массива не изменила облако точек.
Вот код, показывающий, что я пытаюсь сделать:
#include <pcl/io/pcd_io.h>
#include <pcl/io/io.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <iostream>
#include <memory>
int main() {
pcl::PointCloud<pcl::PointXYZI>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZI>);
int num_points = 2;
cloud->resize(num_points);
float *new_points = new float[3 * num_points];
new_points[0] = 0; new_points[1] = 1; new_points[2] = 2;
new_points[3] = 3; new_points[4] = 4; new_points[5] = 5;
auto m = cloud->getMatrixXfMap(3, 8, 0);
auto f_array = m.data();
// Some processing happens here to f_array (?)...
// This should print {0, 1, 2} and {3, 4, 5}
for (int i = 0; i < num_points; i++) {
std::cout << "Point [" << i << "]: " << cloud->points.at(i).x << ", "
<< cloud->points.at(i).y << ", " << cloud->points.at(i).z << std::endl;
}
return 0;
}