凸包问题之GrahamScan解法

来源:互联网 发布:linux设置文件权限 编辑:程序博客网 时间:2024/05/16 06:55

首先了解一下GrahamScan解法的原理:

当沿着Convex hull逆时针漫游时,总是向左转在极坐标系下按照极角大小排列,然后逆时针方向漫游点集,去除非Convex hull顶点(非左 转点)

第一步


 

这里P0是极坐标的中心,在编程的时候,经常就是选择y坐标最低的点

第二步:


这样就建立起了所有点到P0的极坐标

第三步:


这里首先选择三个点压栈,这三个点肯定构成的是非右转关系

看P3


可以发现P3和P2P1构成右转关系,因此考虑把P2从凸包点中排除,然后把P3加入到凸包栈中,继续向前探进

第四步:


这里P3P4P5都不构成右转,因此都放入到凸包栈中,

第五步:


P6P5P4构成右转关系,因此需要删除P5,加入P6,


P7P6P4构成右转关系,因此删除P6,加入P7,P7P4P3构成非右转关系,删除P4。。。。。。。

知道所有点都遍历完

第七步:


上图构成的就是凸包了(包括P0)

0 0
原创粉丝点击