凸多边形不透明集屏障算法研究
1. 连通屏障
对于一个具有 $n$ 个顶点的凸多边形 $P$,存在一个定理:可以在 $O(n)$ 时间内计算出一个连通多边形屏障,其长度最多是最优屏障长度的 $\frac{\pi + 5}{\pi + 2} = 1.5834…$ 倍。
下面是具体的算法 A1:
- 首先,计算包围 $P$ 的最小宽度平行带。不妨假设该带由两条水平线 $\ell_1$ 和 $\ell_2$ 界定。
- 其次,计算包围 $P$ 的最小正交(即垂直)带,由两条垂直线 $\ell_3$ 和 $\ell_4$ 界定。设 $a, b, c, d, e, f$ 是 $\ell_3$ 和 $\ell_4$ 上的六个线段,其中 $b$ 和 $e$ 是 $P$ 边界上的两个(可能退化的)线段。
- 令 $P_1$ 是 $P$ 边界上 $b$ 和 $e$ 下顶点之间的多边形路径,$P_2$ 是 $P$ 边界上 $b$ 和 $e$ 上顶点之间的多边形路径。
- 考虑 $P$ 的两个屏障:$B_1$ 由多边形路径 $P_1$ 两端向上延伸直至到达 $\ell_2$ 组成;$B_2$ 由多边形路径 $P_2$ 两端向下延伸直至到达 $\ell_1$ 组成。算法返回两者中较短的一个。
设 $p$、$w$ 和 $r$ 分别是 $P$ 的周长、宽度和内半径。显然有 $|P_1| + |P_2| + |b| + |e| = p$。并且有以下等式:
$|B_1| = |a| + |b| + |P_1| + |e| + |f|$
$|B_2| = |c| + |b| + |P_2| + |e| + |d|$
将它们相加可得 $|B_1|
超级会员免费看
订阅专栏 解锁全文
1139

被折叠的 条评论
为什么被折叠?



