在计算凸包时,我们想要找到一个最小的凸多面体,它包含了给定点集合中的所有点,并且多面体的边界是由这些点确定的。凸包在计算机图形学、地理信息系统、机器人运动规划等领域中都有广泛的应用。
之前文字有讲到CGAL这个几何算法库,里面就有计算凸包的算法,详细的可以阅读源码文件,这里写一个使用CGAL求解三维空间中点集凸包计算。
std::vector<K::Point_3> cgal_p1;
//rp是点集,转换成CGAL点集格式
for (int v = 0; v < rp.size(); v++)
{
K::Point_3 p(rp[v].x, rp[v].y, rp[v].z);
cgal_p1.push_back(p);
}
CGAL::Polyhedron_3<K> poly;
// compute convex hull of non-collinear points
CGAL::convex_hull_3(cgal_p1.begin(), cgal_p1.end(), poly);
std::ofstream output(path);
output << poly;
output.close();
//输出了off格式文件