二维凸包是指一个面积最小的凸多边形,使得一个给定的点集都分布在这个凸多边形的内部或者边上。
前置技能
计算几何基础,这个大概不用说了。
过程
咕咕咕,这里我们使用比较好想的算法进行求解。
前方大图警告。
首先呢,是一个点集。
因为坐标最小的点肯定在这个凸包上,所以我们先找出坐标最小的点,记为。
接着考虑把剩下的点对于从右往左编号。
PS:截图的锅,上面那个点是。
预处理完毕,接下来我们需要一个栈。由于和在凸包边界上,考虑将和入栈。
未完成的凸包用红色线条表示。
考虑,加入它之后红色边界仍然是凸的,入栈。
接下来考虑,加入它之后边界是凹的,把当前栈顶出栈。
考虑加入当前红色边界加入仍然是凸的,所以入栈。
由于连续加入,,后所得的红色边界仍然是凸的,所以将它们依次入栈。
在考虑时,发现边界是凹的,将栈顶出栈,而入栈。
考虑。在连续出栈和都不能满足红色边界为凸的,所以一出栈,将入栈。
依次进行以下操作,可以得到一个处理到最后一个点的图像,然后就完结撒花了!
所以说,呢?
对不起,没有个鬼。
出门右转看代码