学习笔记·二维凸包

二维凸包是指一个面积最小的凸多边形,使得一个给定的点集都分布在这个凸多边形的内部或者边上。

前置技能

计算几何基础,这个大概不用说了。

过程

咕咕咕,这里我们使用比较好想的算法进行求解。
前方大图警告。
首先呢,是一个点集。

因为坐标最小的点肯定在这个凸包上,所以我们先找出坐标最小的点,记为

接着考虑把剩下的点对于从右往左编号。

PS:截图的锅,上面那个点是
预处理完毕,接下来我们需要一个栈。由于在凸包边界上,考虑将入栈。
未完成的凸包用红色线条表示。

考虑,加入它之后红色边界仍然是凸的,入栈。

接下来考虑,加入它之后边界是凹的,把当前栈顶出栈。

考虑加入当前红色边界加入仍然是凸的,所以入栈。

由于连续加入后所得的红色边界仍然是凸的,所以将它们依次入栈。



在考虑时,发现边界是凹的,将栈顶出栈,而入栈。


考虑。在连续出栈都不能满足红色边界为凸的,所以一出栈,将入栈。



依次进行以下操作,可以得到一个处理到最后一个点的图像,然后就完结撒花了!


所以说,呢?
对不起,没有个鬼
出门右转看代码