gpt4 book ai didi

C++ ConvexHull of points 算法(及其索引)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:04:03 31 4
gpt4 key购买 nike

我需要实现一个 C++ 代码来计算点的 ConvexHull 并返回索引,但我找不到用 C++ 实现的方法?

在 Matlab 和 Python 中,您只需将点数组传递给 ConvexHull 函数并返回索引即可;我们在 C++ 中有等效的东西吗?

最佳答案

我需要在 C++ 中获取点云的凸包索引,并且对 PCL 或 Boost 提供的函数不返回点索引这一事实感到恼火。你是对的,QHull 文档看起来很复杂。所以我去看了PCL source codes并自己提取。这是我得到的

extern "C"
{
#include <qhull/qhull.h>
}

pcl::PointCloud<pcl::PointXYZ>::Ptr cloud; // some point cloud
int dimension = 2, size = cloud->size();
coordT* points = reinterpret_cast<coordT*> (calloc (size*dimension, sizeof(coordT)));
for (size_t i=0; i<size; ++i)
{
points[2*i] = static_cast<coordT> (cloud->points[i].x);
points[2*i+1] = static_cast<coordT> (cloud->points[i].y);
}
int exitcode = qh_new_qhull(dimension, size, points, true, const_cast<char*> ("qhull FA"), NULL, NULL);
if (exitcode != 0 || qh num_vertices == 0)
{
std::cerr << "ERROR: qhull was unable to compute a convex hull for the given point cloud" << std::endl;
}
pcl::PointIndices::Ptr hull_indices (new pcl::PointIndices());
vertexT * vertex;
FORALLvertices
{
hull_indices->indices.push_back(qh_pointid(vertex->point));
}
qh_freeqhull(!qh_ALL);
int curlong, totlong;
qh_memfreeshort(&curlong, &totlong);

请注意,这是针对 2D 点云的。对于其他维度或数据类型,您可以相应地进行修改。希望对您有所帮助!

关于C++ ConvexHull of points 算法(及其索引),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29040067/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com