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

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

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

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

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

3、具体过程:

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

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

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

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

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

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

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

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

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

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


相关推荐
Zevalin爱灰灰2 小时前
现代密码学 第二章——流密码【下】
算法·密码学
飞Link4 小时前
大模型长文本的“救命稻草”:深度解析 TurboQuant 与 KV Cache 压缩技术
算法
郝学胜-神的一滴5 小时前
深度学习优化核心:梯度下降与网络训练全解析
数据结构·人工智能·python·深度学习·算法·机器学习
Je1lyfish5 小时前
CMU15-445 (2025 Fall/2026 Spring) Project#3 - QueryExecution
linux·c语言·开发语言·数据结构·数据库·c++·算法
许彰午5 小时前
03-二叉树——从递归遍历到非递归实现
java·算法
Brilliantwxx5 小时前
【C++】 vector(代码实现+坑点讲解)
开发语言·c++·笔记·算法
NorburyL7 小时前
DPO笔记
深度学习·算法
老纪的技术唠嗑局7 小时前
深度解析 LLM Wiki / Obsidian-Wiki / GBrain:Agent 时代知识的“自组织”与“自进化”
大数据·数据库·人工智能·算法