CGAL点集二维凸包算法实现
凸包(Convex Hull)是计算几何学中的一个重要问题,指在二维或三维空间中使一组点集能够完全包围而形成的最小多边形或多面体。其中二维凸包就是指用一条封闭曲线将点集全部围住的凸多边形。
CGAL是计算几何算法库的缩写,是使用C++语言编写的开源算法库。在CGAL中已经有了许多凸包算法,点云二维凸包算法是其中一种。该算法可以处理平面上的任意点集,在保证时间复杂度(O(nlogn))的同时还能保证输出的凸包不带冗余。
接下来我们将会针对该算法进行详细介绍,并提供相应的源代码。
算法流程:
- 将点集按照x坐标从小到大进行排序。
- 根据Graham扫描法,找出点集中的上凸壳和下凸壳。
- 将上凸壳和下凸壳合并为一个多边形。
代码实现:
CGAL的点云二维凸包算法是通过CGAL库中的Convex_hull_traits_2和convex_hull_2函数实现,代码如下所示:
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>