凸包(convex hull)

凸包(convex hull)


凸包是指对于平面上给定的一些点,选取一个最小的凸多边形使得这些点或者在其内部,或者在其边上。

求凸包的Graham扫描法 

 

针对一个有三个或以上点的点集Q 

 

基本算法:
1. 已知各点坐标,将他们放入一个二维坐标系
2. 算出各点极角,按降序排序 , 取最小点做起点
3. 三点扫描一次:
    if        对于不符合的点删除,然后继续扫描当前三点
    else    符合的点就找下一个点继续,直到扫描了所有的点

 

代码分析:
1. 建立一个点结构体point, 包括x,y坐标,和angle表示极角
2. 考虑到要排序,将初始的点用multiset 保存
3. 保存处理的点用deque(有的方法是用stack,因为操作中有类似出栈入栈的操作。但是判断点的过程是要访问到两个点,就是说不仅仅是要访问栈顶元素,而且还要访问栈顶的下一个元素,个人觉得不符合stack 的定义,所以我就用了deque)
4. 最后结果是保存在deque中 , deque中的点元素就是组成所求凸包的点
 

 

代码:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值