多边形中可见性计算与简单多边形识别算法解析
1. 带孔多边形中一点可见性的计算
在处理带孔多边形中一点 $q$ 的可见性问题时,我们可以采用两种不同时间复杂度的算法,下面将详细介绍。
1.1 O(n log n) 时间复杂度算法
该算法基于角平面扫描的思想,具体步骤如下:
1. 绘制水平线并计算交点 :从点 $q$ 向右绘制水平线 $L$,计算 $L$ 与多边形 $P$ 各边的交点。
2. 对交点进行排序 :将交点按照从左到右的顺序进行排序,设排序后的交点为 $(u_1, u_2, \ldots, u_k)$。
3. 构建平衡二叉树 :将包含交点 $u_i$ 的多边形边 $e(u_i)$ 作为节点,按照排序顺序连接这些节点,构建平衡二叉树 $T$。
4. 对顶点进行排序 :根据顶点相对于点 $q$ 的极角对多边形 $P$ 的顶点进行排序,并标记为 $v_1, v_2, \ldots, v_n$,同时初始化索引 $i$ 为 1。
5. 处理顶点 :
- 如果顶点 $v_i$ 的两条边都是活动边,则执行删除操作 $Delete(T, i)$,若左最叶子节点发生变化,计算 $\overrightarrow{q v_i}$ 与当前左最叶子节点所在边的交点 $z$,并将 $v_i z$ 添加到构造边列表中,然后跳转到步骤 8。
- 如果顶点 $v_i$ 只有一条边是活动边,则执行更新操作 $Update(T, i)$,然后跳转到步
超级会员免费看
订阅专栏 解锁全文
14

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



