算法提高:计算几何基础 | 详解凸包问题

简介: 点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上,或者在其内

640.jpg


点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上,或者在其内。图1中由线段表示的多边形就是点集Q={P0,P1,P2,P3,P4,P5,P6}的凸包。

640.png


■ 图1 点集的凸包


01、实例应用:捕野猪

问题描述:

由于马克的家在未开发的原始森林,因此野生动物很多。春节前,马克和村民商谈决定大家一起捕野猪,将其作为年猪。捕野猪的方法很简单: 去捕野猪的人一人站一个地方。他们抓住同一根绳子,将一大片森林围起来。只要野猪在里面,就跑不掉。(围成的多边形是简单多边形)

输入:

先输入一个正整数t,表示有t组数据。然后输入一个正整数n,表示有n个人。接下来n行每行有两个整数,表示一个人的位置(顺序是沿着绳子向一个方向输入)。最后一行有两个整数,表示野猪的位置。

输出:

输出是否野猪被捕。若是,则输出yes,否则输出no。

输入样例:

1
3
0 0
2 0
0 2
1 1

输出样例:


yes

解题思路:

根据给定的点构造一个最小凸边形,然后判断野猪的位置与凸包的关系,确定是在凸包内,还是在凸包外。

判断点是不是在凸包中,以点P为端点,向右边做一条射线,由于多边形是有界的,所以设L一定与多边形相交,当交点数为基数时,P点在多边形内,否则P点在多边形外。其中特殊情况为: L与多边形的顶点相交,当顶点的两相邻边在射线的同侧时,该顶点不算,否则算一个;当射线与一条边重合时,这条边不算,进行逐条线段的扫描。

参考程序:

eb5432dea5d919ad02b0640f43ae0979.png


28531b91483b69a4fa67ae22a3307d25.png


34f1bc3d9f6443ca267ee11b0c6e0d30.png

目录
相关文章
|
存储 算法 C++
C++基础算法离散化及区间合并篇
C++基础算法离散化及区间合并篇
168 0
|
机器学习/深度学习 传感器 算法
用于准确量化颅面对称性和面部生长的 3D 头影测量方案(Matlab代码实现)
用于准确量化颅面对称性和面部生长的 3D 头影测量方案(Matlab代码实现)
|
6月前
技术心得:曲率计算公式推导
技术心得:曲率计算公式推导
92 0
|
算法 计算机视觉
基于凸多边形最大化的高光谱端体提取算法(Matlab代码实现)
基于凸多边形最大化的高光谱端体提取算法(Matlab代码实现)
|
机器学习/深度学习 传感器 算法
融合黄金正弦和随机游走的哈里斯鹰优化算法(GSHHO)-附matlab代码
融合黄金正弦和随机游走的哈里斯鹰优化算法(GSHHO)-附matlab代码
|
7月前
|
传感器 存储 算法
基于ENVI与ERDAS的Hyperion高光谱经验比值法、一阶微分法叶绿素及地表参数反演
基于ENVI与ERDAS的Hyperion高光谱经验比值法、一阶微分法叶绿素及地表参数反演
190 1
|
算法
用于二维和三维声学设计灵敏度分析的奇异边界法(Matlab代码实现)
用于二维和三维声学设计灵敏度分析的奇异边界法(Matlab代码实现)
|
自然语言处理 算法 测试技术
【图像处理】基于收缩系数的粒子群优化和引力搜索算法的多级图像阈值研究【CPSOGSA】(Matlab代码实现)
【图像处理】基于收缩系数的粒子群优化和引力搜索算法的多级图像阈值研究【CPSOGSA】(Matlab代码实现)
|
机器学习/深度学习 传感器 算法
基于有限差分法和追赶法解对角矩阵解二维热传导问题附matlab代码
基于有限差分法和追赶法解对角矩阵解二维热传导问题附matlab代码
时空不平坦,能量不守恒。大爆炸时粒子凭空产生的情形
时空不平坦,能量不守恒。大爆炸时粒子凭空产生的情形
59 0
时空不平坦,能量不守恒。大爆炸时粒子凭空产生的情形