计算机图形学·23 Weiler-Athenton多边形裁剪算法

本文是记录专业课计算机图形学的部分笔记,参考教材为Angel的第八版交互式计算机图形学------基于WebGL 2.0的自顶向下方法。

1、Weiler-Athenton算法功能强大,支持任意形状(凸、凹、带内环)的被裁剪多边形与裁剪窗口。我们先来考虑约定:记主多边形(被裁剪多边形)为P 、裁剪多边形(裁剪窗口)为Q 。

这里,主多边形和裁剪多边形均用它们顶点的环形表定义,且多边形的外部边界取逆时针方向,而其内边界(孔洞)取顺时针方向。当遍历顶点表时,上述约定将保证多边形的内部总是位于前进方向的左侧(左手法则)。主多边形和裁剪多边形的边界可能相交,也可能不相交。若它们相交,则交点必成对地出现,即,其中一个交点为主多边形的边进入裁剪多边形内部时的交点,而另一交点为其离开时的交点。

2、算法思路:算法可以从进入交点开始,沿主多边形的外部边界按照逆时针方向向前跟踪,直至找到它与裁剪多边形的一个交点为止。在交点处改变跟踪边,开始沿裁剪多达形的外部边界按照逆时针方向跟踪,直至发现它与主多边形的一个交点后,再次改变跟踪边,再次沿主多边形的边界跟踪。继续上述过程,直至到达算法起始点位置为止。若为内部边界,则按顺时针方向跟踪。

3、具体过程:

①建立主多边形和裁剪多边的顶点表。

②求主多边形和裁剪多边形的交点,并将这些交点按顺序插入两多边形的顶点表中,得到新顶点表。

③在两个多边形的顶点表中的相同交点间建立双向指针。

④裁剪,如果存在没有被跟踪过的交点,执行以下步骤:

-- (a) 建立空的裁减结果多边形的顶点表。

-- (b) 选取任意一个没有被跟踪过的交点为起点,将其输出到结果多边形顶点表中。

-- (c) 如果该交点为进点,则跟踪主多边形边界(顶点表);否则跟踪裁剪多边形边界(顶点表)。

-- (d) 跟踪多边形边界,每遇到多边形顶点,就将其输出到结果多边形顶点表中,直至遇到新的交点。

-- (e) 将该交点输出到结果多边形顶点表中,并通过连接该交点的双向指针改变跟踪方向(如果上一步跟踪的是主多边形边界,现在改为跟踪裁剪多边形边界;如果上一步跟踪的是裁剪多边形边界,现在改为跟踪主多边形边界)。

-- (f) 重复(d)、(e)步,直至回到起点为止。


相关推荐
UIU11411 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
论文复现现场11 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
ZhengEnCi11 小时前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
秋天的怀念_David12 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
碧海银沙音频科技研究院13 小时前
在PC电脑上用Whisper→Marian算法实现离线语音翻译功能
算法·whisper
niyongsheng13 小时前
3D 装箱算法工程化:数据结构、放置启发式与支撑规则
数据结构·算法·rust
j7~16 小时前
【穷举、深搜与回溯算法】一棵决策树讲透全排列与子集
数据结构·c++·算法·leetcode·回溯·递归
傅科摆 _ py17 小时前
DP,贪心,堆和栈,二分力扣复习
开发语言·python·算法
Shaoshing17 小时前
LeetCode100 42.接雨水
java·算法·leetcode
域限奇点访客18 小时前
用AI生成问卷的网站怎么选?看题目录入结构、题型映射和生成后的校验
算法