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

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

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

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

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

3、具体过程:

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

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

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

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

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

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

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

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

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

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


相关推荐
aini_lovee8 小时前
FMCW雷达测速测距系统(锯齿波 + CFAR检测)
算法
qq_297574678 小时前
设计模式系列文章(基础篇第 11 篇):模板方法模式——定义算法骨架,实现代码复用与流程统一
算法·设计模式·模板方法模式
lqqjuly8 小时前
知识蒸馏:理论、算法与可运行实现
人工智能·深度学习·算法
水上冰石8 小时前
comfui的sd1.5模型,有多少采样算法,详解每一个采样算法
人工智能·算法
肥or胖8 小时前
Qt中OpenGL快速入门
qt·音视频·opengl
黎阳之光8 小时前
视频孪生+空天地水工融合,黎阳之光构建智慧水利监测新范式
大数据·人工智能·物联网·算法·安全
cheems95278 小时前
[算法手记] 贪心 爬楼梯问题
算法·贪心算法
KaMeidebaby9 小时前
卡梅德生物技术快报|酵母双杂交 cDNA 文库构建与蛋白互作筛选流程
服务器·前端·数据库·人工智能·算法
sheeta19989 小时前
LeetCode 每日一题笔记 日期:2026.05.27 题目:3121. 统计特殊字母的数量 II
笔记·算法·leetcode
ST——Jess9 小时前
年度行业趋势研究报告:泛心理数字化赛道“流日推演”的算法困境与高保真交互范式重构
人工智能·算法·架构