凸包(convex hull)简述
创作时间:
作者:
@小白创作中心
凸包(convex hull)简述
引用
CSDN
1.
https://m.blog.csdn.net/mrbaolong/article/details/144912973
凸包是计算几何中的一个基本概念,广泛应用于计算机图形学、地理信息系统等领域。本文将介绍凸包的定义及其两种常用的求解算法:Andrew算法和Graham扫描法。
凸包(convex hull)简述
这里主要介绍二维凸包,二维凸多边形是指所有内角都在[ 0 , Π ] [0,\Pi ][0,Π]范围内的简单多边形。凸包是指在平面上包含所有给定点的最小凸多边形。
数学定义:对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。
凸包算法
Andrew 算法求凸包
Andrew 算法(也叫单调链算法)用于求解平面上一组点集的凸包,它的基本思想是先将点集按照横坐标(若横坐标相同则按照纵坐标)进行排序,然后通过遍历排序后的点依次构建凸包的上链和下链,最终合并得到完整的凸包。该算法的时间复杂度为O ( n log n ) O(n\log n)O(nlogn),其中n为待求凸包点集的大小。
算法过程:
- 将点集P按照横坐标升序排序,若横坐标相同则按照纵坐标升序排序;
- 构建凸包的下链,从左到右遍历排序后的点集,利用一个栈(可以用数组模拟)来维护凸包的下链。对于每个点,不断检查栈顶的两个点与当前点所构成的向量是否满足 “左转” 条件(通过叉积判断),若不满足则弹出栈顶元素,直到满足条件或者栈中元素个数小于 2,然后将当前点压入栈中;
- 构建凸包的上链,从右到左遍历排序后的点集(不包括已经在凸包下链中的点),同样利用栈来维护凸包的上链,执行和构建下链类似的操作,不断检查栈顶的两个点与当前点所构成的向量是否满足 “左转” 条件,若不满足则弹出栈顶元素,直到满足条件或者栈中元素个数小于2 ,然后将当前点压入栈中;
- 将凸包的下链(除了最后一个点,因为它和上链的第一个点重复)和凸包的上链合并起来,得到最终的凸包。
上图为排序好的点集
上图为从左到右构建下凸包的过程
上图为从右到左构建上凸包的过程,最后红色实线和黑色实线组成凸包
Graham 扫描法
与Andrew算法相同,Graham扫描法的时间复杂度为O ( n log n ) O(n\log n)O(nlogn),复杂度瓶颈也在于对所有点排序。
算法过程:
- 找到基点(最左下角的点):遍历点集,找出纵坐标最小的点,如果有多个纵坐标最小的点,则选择其中横坐标最小的那个点作为基点。这个基点是后续极角排序以及构建凸包的重要参考点。
- 极角排序:计算除基点外其他各点相对于基点的极角,按照极角从小到大对这些点进行排序(若极角相同,则按照距离基点的距离从小到大排序)。通过极角排序能确定点集的一种相对顺序,方便后续扫描构建凸包。
- 扫描构建凸包:利用一个栈来维护凸包的点。先将基点和排序后的第一个点压入栈中,然后从第二个点开始依次遍历排序后的点集,对于每个点,检查栈顶两点与当前点所构成的向量是否满足 “左转” 条件(通过叉积判断),若不满足则弹出栈顶元素,直到满足左转条件或者栈中元素个数小于 2,之后将当前点压入栈中。最终栈中存储的点就是凸包的顶点。
参考
热门推荐
谨防二维码陷阱:揭秘网络钓鱼攻击与保护措施
集体合同与劳动合同的区别
音响喇叭知识:音质背后的技术与艺术
如何查看你的微信支付分?微信支付分多少算高?详解来了...
大熊猫蜕变之路:本是“食肉”动物,是怎么混到靠吃竹子为生的?
儿童适合喝什么牛奶好?你的选择真的对了吗?
黄磊导演的五部微电影作品盘点
湖北推进未来产业创新发展 明确六大重点方向
正常心电图及其各波和间期的生理意义
四分率第一,市重率倒数第一的嘉定区是顶尖孩子的天堂吗?——嘉定区升学数据详解
写给"社恐"的社交指南!参加社交场合前、中、后的技巧练习,让你从容迎战每个聚會
司普奇拜单抗长期疗效数据公布:中重度特应性皮炎治疗迎来新选择
一只AI玩家,单挑《黑神话》,歇菜1000次,终于击败首个Boss
使用地塞米松和甘露醇治疗腰椎间盘突出会否加剧病情
广东派潭高滩温泉:岭南第一温泉的前世今生
刘彻废分封:中国古代法律变革与中央集权制度的确立
静默不仅是沉默,更是一个内省的过程,让我们聆听内心的声音。
春季买来的盆栽栀子花带大量花苞,为啥花不断掉,没法正常开?
心动过缓的原因及治疗措施是什么呢
天坛公园赏花攻略
【全国疟疾日】预防疟疾:从防蚊灭蚊开始
什么是 API Token 以及如何使用它
欧亚媒体走进茅台镇:“这是一次难忘的奇妙旅程”
公积金连续缴纳满6个月可以贷款吗?了解一下!
骨折护理康复 全方位呵护 助力患者快速恢复
美国夏威夷地图及位置介绍
沙棘种子怎么种植方法
新鲜出炉!2024南京理工大学考研(分专业)复录数据统计!25南理工考研必看!
天津区级城市的黑马,跨越式发展的静海区,二十街镇乡共建大静海
探讨铜线在电力传输中的关键作用