在数学中,**凸包(convex hull)**是一个几何术语,用于描述一个点集的最小凸集。具体来说,给定平面或空间中的一个有限点集,凸包是包含这些点的最小凸多边形或多面体。
在数学和计算几何中,凸包(Convex Hull)是指在二维或更高维度的空间中,对于一个点集,存在一个最小的凸集合,使得这个点集完全包含在这个凸集合内。简单来说,如果我们将这些点想象成钉子上的绳子,当你拉紧绳子并形成一个封闭的形状时,这个形状就是这些点的凸包。
更正式地定义,给定一组点P,在欧几里得空间中的凸包是所有包含P的凸集合的交集。在二维空间中,凸包可以看作是一个多边形,其边界由一些输入点构成,这些点称为凸包的顶点。在三维空间中,凸包则是一个多面体。
凸包在计算机科学、图形学、模式识别、统计分析等领域有广泛的应用,例如在聚类分析、机器人路径规划、碰撞检测等场景中。计算凸包的算法有很多,如Graham扫描法、Jarvis步进法(增壳算法)、Divide and Conquer算法等。
凸包
定义
对于一个点集 ( S )(可以在二维平面、三维空间或更高维度中),其凸包 ( Conv ( S ) \text{Conv}(S) Conv(S) ) 是包含 ( S ) 的最小凸集。换句话说,凸包是一个包含 ( S ) 的最小凸区域。
凸集
一个集合 ( C ) 被称为凸集,当且仅当对于集合中任意两点 ( A ) 和 ( B ),连接 ( A ) 和 ( B ) 的线段始终在集合 ( C ) 内。形式化地,如果对于任意的 ( x, y \in C ) 和任意的 ( t \in [0, 1] ),点 ( (1-t)x + ty \in C ),则 ( C ) 是一个凸集。
示例
- 二维平面中的凸包:给定一组点,在二维平面中,它们的凸包是一个凸多边形,其顶点是点集中某些点,这些点围成了一个包含所有点的最小凸多边形。
- 三维空间中的凸包:在三维空间中,给定一组点,它们的凸包是一个凸多面体,其面由点集中某些点形成,包含所有点的最小凸多面体。
计算方法
计算凸包的常用算法包括:
- Graham扫描算法:在二维平面中找到凸包的一种高效算法,时间复杂度为 ( O ( n log n ) O(n \log n) O(nlogn) )。
- Jarvis步进(礼帽算法):一种简单但在最坏情况下效率较低的算法,时间复杂度为 ( O ( n h ) O(nh) O(nh) ),其中 ( h ) 是凸包上的点数。
- Quickhull算法:一种在实践中较为高效的算法,类似于快速排序,时间复杂度为 ( O ( n log n ) O(n \log n) O(nlogn) )。
- Chan’s Algorithm:一种混合算法,结合了 Graham 扫描和 Jarvis 步进,时间复杂度为 ( O ( n log h ) O(n \log h) O(nlogh) )。
应用
凸包在计算几何、图像处理、地理信息系统、机器人路径规划等领域有广泛应用。例如,在图像处理领域,常使用凸包对目标物体进行形状近似。
总结一下,凸包是一个包含点集的最小凸多边形或多面体,是计算几何中的基本概念和工具。
相关延伸
凸d-多边形
凸d-边形(convex d-gon)是指一个有d个顶点的凸多边形。在几何学中,一个多边形如果内部任意两点的连线完全位于该多边形内部,则称这个多边形为凸多边形。对于凸d-边形,这里的d表示多边形的顶点数,也就是边的数量。
例如,当d=3时,我们得到的是一个三角形;当d=4时,我们得到的是一个四边形,它可以是一个矩形、正方形或者菱形等;以此类推,随着d值的增加,我们可以得到更多边的凸多边形。在凸多边形中,所有的内角都小于180度,并且没有凹进去的部分。