首先了解一下GrahamScan解法的原理:
当沿着
Convex hull
逆时针漫游时,总是向左转
在极坐标系下按照极角大小排列,然后逆时针
方向漫游点集,去除非
Convex hull
顶点
(
非左
转点
)
。
第一步
这里P0是极坐标的中心,在编程的时候,经常就是选择y坐标最低的点
第二步:
这样就建立起了所有点到P0的极坐标
第三步:
这里首先选择三个点压栈,这三个点肯定构成的是非右转关系
看P3
可以发现P3和P2P1构成右转关系,因此考虑把P2从凸包点中排除,然后把P3加入到凸包栈中,继续向前探进
第四步:
这里P3P4P5都不构成右转,因此都放入到凸包栈中,
第五步:
P6P5P4构成右转关系,因此需要删除P5,加入P6,
P7P6P4构成右转关系,因此删除P6,加入P7,P7P4P3构成非右转关系,删除P4。。。。。。。
知道所有点都遍历完
第七步:
上图构成的就是凸包了(包括P0)