convex hull

1 什么是convex hull

就是凸包,是计算几何中的一个概念,计算几何是计算机图形学的基础之一。

对于二维平面来说是这样的:对于二维平面上的点集,凸包是位于最外层的点构成的包围其它所有的点的凸多边形。

2 Graham's scan算法

第一,找initial点

y最小的点,如果有多个,选择x也最小的点。

第二,对所有其它的点进行排序

计算initial点到所有其它点的连线和x轴的夹角,从小到大排列。

第三,找right turn

所谓的right turn就是从上个点到本点向对于上上个点到上个点是不是向右转了。如果是的话,就要删除掉上个点,而直接连上上个点,直到是left turn为止,进栈。

第四,找right turn的起始点

从第三个点就可以开始找了,先将前两个点入栈。

遍历完之后,栈里面所剩的点构成的多边形就是凸包。

3 算法的时间复杂度

O(nlgn)

4 算法的正确性

因为算法遍历了所有的点,并且保证了所有的点都在外接多边形构成的边的左边,所以就保证了所有的点都在该外接多边形的内部。 另外,所有的边都是向左走的,因此这个多边形是一个凸多边形,所以算法是正确的。

原文地址:https://www.cnblogs.com/hustdc/p/7611527.html