如何运用快速凸包算法高效处理散点云数据?
摘要: 凸包问题是计算几何中的一个经典问题,目标是找到包含给定点集的最小凸多边形(二维情形)或凸多面体(三维情形)。它解决的问题在于找到一个凸多边形或凸多边形,这个多边形包含了给定的 n 个点,使得这个多边形是包含这些点的最小凸集合。本笔记首先
散点云处理笔记(三):快速凸包算法(Quick Hull Algorithm)
凸包问题是计算几何中的一个经典问题,目标是找到包含给定点集的最小凸多边形(二维情形)或凸多面体(三维情形)。它解决的问题在于找到一个凸多边形或凸多边形,这个多边形包含了给定的 n 个点,使得这个多边形是包含这些点的最小凸集合。本笔记首先给出三维散点凸包算法的数学推导,可以从“凸包”这个基本概念出发,一步步深入到算法背后的数学原理,最后给出快速凸包算法的。
1. 最小凸包的数学定义
最小凸包问题(Convex Hull Problem)的数学表达可以从集合论、凸分析和计算几何三个角度进行形式化定义。核心思想是:在包含给定点集的所有凸集中,寻找体积(或表面积、维度)最小的那个。下面从凸组合、交集、对偶优化表达的几个角度给出最小凸包问题的定义。
Definition 1.1 基于凸组合的定义(构造性表达)
设点集\(\mathbf{P}=\{\mathbf{p}_1,\mathbf{p}_2,\cdots,\mathbf{p}_n\}\subset\mathbb{R}^d\),其中凸包\(\mathbf{conv}(\mathbf{P})\) 是\(\mathbf{P}\) 中所有点的凸组合构成的集合:
\[\mathbf{conv}(\mathbf{P})=\left\{\sum_{i=1}^{n}\lambda_i\mathbf{p}_i\bigg|\lambda_i\geq0,\sum_{i=1}^n\lambda_i=1\right\} \tag{1}
\]
这个定义直接给出了凸包作为点集的构造方式,但不易直接用于算法设计。
Definition 1.2 基于交集的定义(几何表达)
凸包也可以表示为所有包含 \(\mathbf{P}\)的凸集的交集:
\[\mathbf{conv}(\mathbf{P})=\bigcap\{\mathbf{C}\subseteq\mathbb{R}^d\big|\mathbf{C}\text{是凸包且}\mathbf{P}\subseteq{\mathbf{C}}\} \tag{2}
\]
这是“最小凸集”的精确数学刻画:它唯一且必然存在。
Definition 1.3 基于支撑函数的对偶表达(优化视角)
在凸分析中,凸集可以用其支撑函数 \(h_c(\mathbf{u})=\sup_{\mathbf{x}\in{\mathbf{c}}}\mathbf{u}^{T}\mathbf{x}\) 描述。凸包问题等于求一个凸包多面体\(H\),使得其支撑函数等于点集支撑函数的上确界:
\[h_{H}(\mathbf{u})=\max_{\mathbf{p}\in{P}}\mathbf{u}^T\mathbf{p},\forall{\mathbf{u}\in{\mathbb{R}^d}} \tag{3}
\]
此时\(H=\mathbf{conv}(\mathbf{P})\)。这个表达与版空间表示紧密相关: 凸包是所有满足\(\mathbf{u}^T\mathbf{x}\leq{\max_{\mathbf{p}\in{P}}\mathbf{u}^T\mathbf{p}}\)的半空间的交集。
Definition 1.4 凸包问题离散形式(计算几何常用)
在实际算法中,我们通常要求输出凸包的顶点集(极点)及其面/边的邻接关系。因此,凸包问题可表述为:
给定有限点集\(P\subset\mathbb{\mathbb{R}^d}\),找出最小的子集\(V\subseteq{P}\),使得\(\mathbf{conv}(V)=\mathbf{conv}(P)\),并给出\(\mathbf{conv}(V)\)的\(\mathbf{facet}(d-1\text{维度})\) 的几何与拓朴信息。
其中,\(\mathbf{p}\in{P}\)是极点(凸包顶点)当且仅当它不能表示为\(P\{p\}\)中点的凸组合。
Definition 1.5 优化形式的等价表述(用于数学规划)
凸包问题还可以写成线性规划的对偶形式:寻找一个凸多面体 \(Q\),使得 \(P\subseteq{Q}\)且\(Q\)的某种度量(如体积)最小。但在离散情况下,这通常转化为枚举所有可能的外包多面体并比较。
最小凸包问题的核心数学表达是 “包含给定点集的最小凸集”,它可以用凸组合、凸集交、支撑函数等方式等价定义。在计算几何中,我们通常寻求输出该凸集的顶点和面结构。
