一个任意多边形的裁剪算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
a 3
A
2
B
C
1 b
4 c
D
2 内裁剪的裁剪结果:
2、外裁剪:从被裁剪多边形的一个“出”点 开始,碰到“出”点,沿着被裁剪多边形按顺时针 方向搜集顶点序列;而当遇到“入”点时,则沿着 裁剪窗口按逆时针方向搜集顶点序列。
a
A
2 1 b
3
B
C
4 c
D
外裁剪的裁剪结果:
3、并集,从被裁剪多边形的一个顶点开始, 碰到“入”点,沿着裁剪窗口按顺时针方向搜集 顶点序列;而当遇到“出”点时,则沿着被裁剪 多边形按顺时针时针方向搜集顶点序列。
一个任意多边形的裁剪算法
指导教师: 姓名: 学号: 专业: 班级:
一、 课题名称与要求
• •
一个任意多边形的裁剪算法
内容及要求:
基于Weiler-Atherton算法实现凹凸 多边形内裁剪(即交集)、外裁剪(即 差集)、并集裁剪。
二、基本概念
入点和出点:
A 2
a
3 B
C
1
4
D
c b 当两个多边形相交时,交点必然成对出现,其中一 个是从被裁剪多边形进入裁剪窗口的交点,称为“入 点”,另一个是从被裁剪多边形离开裁剪窗口的交点, 称为“出点”。
a A 2 3 B
C
wenku.baidu.com
1 b
4 c
D
并集裁剪结果:
五、难点:
算法在实现中,需要用到六个数组, 分别用来存放:被裁剪多边形,裁剪窗口, 交点数组,插入交点后的被裁剪多边形, 插入交点后的裁剪窗口,输出多边形。 算法的主要难点在入、出点的查寻以 及跨数组搜索上。
总结
通过大学四年的学习,我们学了很多技术方 面的理论知识,但动手能力不强,在多边形裁 剪中,有效地结合了之前所学的科目,如VC++ 编程语言,图形学,数据结构,MFC等。 通过本论文的锻炼,让我第一次在VC的环 境下使用C++实现规模较大,功能较复杂的代码 设计,使我对C++近一步的体会和理解。论文整 体基本功能已经做出,但有些功能模块由于时 间关系没能实现,没有达到预先设想的需求。 还需要我在今后的学习中,不断地研究和完善。
thank you
三、算法流程图
以内裁剪为例
将交点分别和被裁剪多边形及 裁剪窗口顶点放入数组3、4中 数组3中有入点 将入点录入到数组Q中 沿数组3取顶点 顶点是出点 沿数组4取顶点 顶点是入点 顶点录入 到Q中 结束
顶点=起始点
输出数组Q
四、 算法的实现及原理
1、界面
由MFC建立一个空文档,然后对界面进行手动操作, 代码由微软MFC提供自动生成,添加一些windows消息 响应函数,生成的主界面如下图:
2、多边形裁剪
其中显示多边形,显示裁剪窗口和被裁 剪多边形。有三种选择方式:交集(即内裁 剪)、并集、差集(即外裁剪),可选择进 入的三种不同的结果。
Picture Frame 1、内裁剪:从一个被裁减的多边形的一
个顶点开始,沿被裁剪多边形以顺时针方向, 经过“入”点继续沿多边形顺时针方向,经过 “出”点沿着裁剪窗口的顺时针方向。
A
2
B
C
1 b
4 c
D
2 内裁剪的裁剪结果:
2、外裁剪:从被裁剪多边形的一个“出”点 开始,碰到“出”点,沿着被裁剪多边形按顺时针 方向搜集顶点序列;而当遇到“入”点时,则沿着 裁剪窗口按逆时针方向搜集顶点序列。
a
A
2 1 b
3
B
C
4 c
D
外裁剪的裁剪结果:
3、并集,从被裁剪多边形的一个顶点开始, 碰到“入”点,沿着裁剪窗口按顺时针方向搜集 顶点序列;而当遇到“出”点时,则沿着被裁剪 多边形按顺时针时针方向搜集顶点序列。
一个任意多边形的裁剪算法
指导教师: 姓名: 学号: 专业: 班级:
一、 课题名称与要求
• •
一个任意多边形的裁剪算法
内容及要求:
基于Weiler-Atherton算法实现凹凸 多边形内裁剪(即交集)、外裁剪(即 差集)、并集裁剪。
二、基本概念
入点和出点:
A 2
a
3 B
C
1
4
D
c b 当两个多边形相交时,交点必然成对出现,其中一 个是从被裁剪多边形进入裁剪窗口的交点,称为“入 点”,另一个是从被裁剪多边形离开裁剪窗口的交点, 称为“出点”。
a A 2 3 B
C
wenku.baidu.com
1 b
4 c
D
并集裁剪结果:
五、难点:
算法在实现中,需要用到六个数组, 分别用来存放:被裁剪多边形,裁剪窗口, 交点数组,插入交点后的被裁剪多边形, 插入交点后的裁剪窗口,输出多边形。 算法的主要难点在入、出点的查寻以 及跨数组搜索上。
总结
通过大学四年的学习,我们学了很多技术方 面的理论知识,但动手能力不强,在多边形裁 剪中,有效地结合了之前所学的科目,如VC++ 编程语言,图形学,数据结构,MFC等。 通过本论文的锻炼,让我第一次在VC的环 境下使用C++实现规模较大,功能较复杂的代码 设计,使我对C++近一步的体会和理解。论文整 体基本功能已经做出,但有些功能模块由于时 间关系没能实现,没有达到预先设想的需求。 还需要我在今后的学习中,不断地研究和完善。
thank you
三、算法流程图
以内裁剪为例
将交点分别和被裁剪多边形及 裁剪窗口顶点放入数组3、4中 数组3中有入点 将入点录入到数组Q中 沿数组3取顶点 顶点是出点 沿数组4取顶点 顶点是入点 顶点录入 到Q中 结束
顶点=起始点
输出数组Q
四、 算法的实现及原理
1、界面
由MFC建立一个空文档,然后对界面进行手动操作, 代码由微软MFC提供自动生成,添加一些windows消息 响应函数,生成的主界面如下图:
2、多边形裁剪
其中显示多边形,显示裁剪窗口和被裁 剪多边形。有三种选择方式:交集(即内裁 剪)、并集、差集(即外裁剪),可选择进 入的三种不同的结果。
Picture Frame 1、内裁剪:从一个被裁减的多边形的一
个顶点开始,沿被裁剪多边形以顺时针方向, 经过“入”点继续沿多边形顺时针方向,经过 “出”点沿着裁剪窗口的顺时针方向。