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

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

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

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

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

3、具体过程:

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

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

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

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

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

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

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

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

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

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


相关推荐
octopus_c3 小时前
数据结构:堆(Heap)详解
c语言·数据结构·算法
YH55269848 小时前
GPT‑5.6 Sol 原本支持 1M 上下文,Codex 现已放开此前限制,如何看待这次调整?
java·jvm·人工智能·gpt·算法·chatgpt
不正经的码狗9 小时前
省级专项项目书撰写全流程实操指南
计算机视觉
遥感知识服务10 小时前
从局部阈值、双极化到暗地表剔除:NASA OPERA DSWx-S1全球动态水体算法拆解
大数据·人工智能·深度学习·神经网络·算法·机器学习
晚风醉蝶10 小时前
1-13-TimSort
算法
ZJU_统一阿萨姆10 小时前
【算子开发】算子融合与Softmax_LayerNorm实现
人工智能·算法·语言模型·硬件架构
叩码以求索12 小时前
浅谈:前序遍历反转法求解N叉树的后序遍历
算法
北风toto14 小时前
中缀、前缀、后缀表达式
算法·软件设计师
听取WA声一片(无恶意)14 小时前
CSP-J/CSP-S 深度优先搜索(DFS)完全讲义
c++·算法·深度优先
码流怪侠14 小时前
2026年8月GitHub热榜深度拆解:Agent Skills席卷开源圈,一个“技能包“收割5万星
算法·程序员·github