本文一共总结了凸包构造的四种算法:Incremental Construction、Jarvis步进法、Graham Scan和Divide-And-Conquer
一、Incremental Construction
就像插入排序一样,每次选一个不在凸包集合内的点加入,判断加入的点是否影响凸包极点(边界点)的size,若加入的点使得size变化或边界集合改变,则调整,如下图6,7,9所示。

1.In-Convex-Polygon Test:判定待定点是否位于某多边形内部
先对多边形进行一个“预处理”,给每个点按序编号,类比有序向量二分查找的思想,来逐步缩小规模。如下图:

首先任选一点为基准点(蓝色点),然后用二分法选取其余点的“中点“(预处理已经为所有点排了序),然后判断基准点到终点的有向直线与待定点的位置关系(to-left test)。然后可将搜索范围减半,反复上述过程,直到最后退化为平凡情况:三角形与点的位置关系(in-triangle test)。
数学中「平凡」「退化」的含义?
- 平凡是指最简单的情形,或者说是容易证明的、容易看到的。
- 退化的事物就是在某种意义的等级或复杂程度上比一般情况更低的事物,可以是某种特殊,极限的情形。
整个算法共log(n)步,每步的to-left test或in-triangle test都为常数成本,则整体复杂度为log(n)。但是,每步都会将原凸包规模减半,且每加入一个极点,凸包的size都会发生改变。就像插入排序一样,每次插入都会改变原来的顺序,需要移动其他靠后的元素,即使使用了效率高的二分查找,对整体的复杂度没有影响,依然是O(n*n)。
判断点是否在

本文详细介绍了计算几何中构建凸包的四种算法:Incremental Construction、Jarvis步进法、Graham Scan和Divide-And-Conquer。Incremental Construction采用类似插入排序的方式,每次判断新点是否影响凸包,复杂度为O(n*n)。Jarvis步进法通过射线法找到凸包极点,复杂度受凸包大小影响。Graham Scan通过预处理和to-left-test快速找到凸包,总复杂度为O(nlogn)。Divide-And-Conquer算法通过递归合并子凸包,复杂度为O(nlogn)。
8624

被折叠的 条评论
为什么被折叠?



