4.1 凸包定义
平面的一个子集S被称为是"凸"的,当且仅当对于任意两点
p,q∈S p,q\in S p,q∈S
线段pq都完全属于S。集合S的凸包Conv(S),就是包含S的最小凸集。
这里所要讨论的,是如何计算平面上由n个点组成的有限集合P的凸包。可以借助一个虚构式实验,来想像这种凸包的模样:将这里的点想像成钉在平面上的钉子;取来一根橡皮绳,将它撑开围住所有的钉子,然后松开手——啪的一声,橡皮绳将紧绷到钉子上,它的总长度也将达到最小。此时,由橡皮绳围住的区域就是P的凸包。
因此,可将平面有限点集P的凸包定义为:顶点取自于P且包含P中所有点的那个唯一凸边形(convex polygon)。
4.2 凸包计算
P的凸包是一个凸多边形。表示多边形的一种自然的方法,就是从任一顶点开始,沿顺时针方向依次列出所有顶点。
给定平面点集P={p1,…,pn},通过计算从P中选出若干点,它们沿顺时针方向依次对应于conv§的各个顶点。
input = 平面上一组点:p1,p2,p3,p4,p5,p6,p7,p8,p9
output = 凸包的表示:
SLOWCONVEXHULL§算法——礼品包装算法
这些边的端点p和q都来自于P;另外,只要适当地定义由p和q所确定直线的方向,使得conv§总是