图形剪裁算法.doc

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图形剪裁算法

计 算 机 图 形 学 课 程 实 验 报 告 《直线、多边形剪裁图形软件设计》 学生: 班级:软 件 一 班 学号:200905070122 目 录 一、任务描述 1 二、算法原理 2 1.1、线段剪裁 2 1.2、多边形裁剪 3 三、算法实现 5 3.1、主窗体 5 3.2、编辑菜单资源 5 3.3、添加消息处理函数 6 3.4、添加代码 6 3.5、设计结果 17 四、总结 20 一、任务描述 在使用计算机处理图形时,计算机内部存储的图形往往比较大,而屏幕显示的只是图的一部分。因此需要确定图形中哪些部分落在显示区内,哪些落在显示区外,以便只显示落在显示区内的那部分图形。这个选择过程称为裁剪。最简单的方法就是把各图形扫描转换为点之后,再判断各点是否在窗内。但那样太费时,一般不可取,这是因为当图形组成部分全部在窗口外,可以完全排除,不必进行扫描转换。所以一般采用首先剪裁再扫描转换的方法。 图1 多边形剪裁 二、算法原理 1.1、线段剪裁 (1)、直线和窗口的关系可以分为如下3类(图2): ① 整条直线在窗口内。此时,不需剪裁,显示整条直。 ② 整条直线在窗口外,此时,不需剪裁,不显示整条直线。 ③ 部分直线在窗口内,部分直线在窗口外。此时,需要求出直线与窗框的交点,并将口外的直线部分剪裁掉,显示窗口内的直线部分。直线剪裁算法有两个主要步骤。首先将不需剪裁的直线挑出,即删去在窗外的直线。然后,对其余直线,逐条直线与窗框求交点,并将窗口外的部分删去。 图2 直线与窗口的关系 (2)、Cohen-Sutherland直线剪裁算法 P1 P3 P4 P2 1001 1000 1010 0001 0000 0010 0101 0100 0110 图3 窗口及其临域的5个区域及与直线的关系 以区域编码为基础,将窗口及其周围的8个方向以4bit的二进制数进行编码。如(图3)上图所示的编码方法将窗口及其邻域分为5个区域: ① 内域:区域(0000)。 ② 上域:区域(1001,1000,1010)。 ③ 下域:区域(0101,0100,0110)。 ④ 左域:区域(1001,0001,0101)。 ⑤ 右域:区域(1010,0010,0110)。 当线段的两个端点的编码的逻辑“与”非零时,线段显然为不可见的。对某线段的两个进行与运算,可知这两个端点是否同在视区的上、下、左、右。算法的主要思想是,对每条直线,如P1、P2利用以下步骤进行判断: 对直线两端点P1、P2编码分别记为C1(P1)={a1,b1,c1,d1},C2(P2)={a2,b2,c2,d2}其中,ai、bi、ci、di取值范围为{1,0},i∈{1,2}。 如果ai=bi=ci=di=0,则显示整条直线,取出了一条直线,返步骤①;否则,进入步骤③。 如果∣a1-a2∣=1, 则求直线与窗上边(Y=Yw-max)的交点,并删去交点以上的部分,如果|b1-b2|=1,∣c1-c2∣=1, ∣d1-d2∣=1,作类似处理。 返步骤①判断下一条直线。 1.2、多边形裁剪 多边形剪裁算法的关键在于,通过剪裁,要保持窗口内多边形的边界部分,而且要将窗框的有关部分按一定次序插入多边形的保留边界之间,从而使剪裁后的多边形的各边仍然保持封闭状态,以便填色算法得以正确实现 图4 多边形剪裁原理示意图 Sutherland-Hodgman算法:思路:将多边形的各边首先相对于窗口的某一条边界进行裁剪,然后将裁剪结果与另一条边界进行裁剪,如此重复多次,便可得到最终结果。实现方法: 设置二个表 输入顶点表(向量)——用于存放被裁剪多边形的顶点P1-Pm。输出顶点表(线性链表)——用于存放裁剪过程中及结果的顶点q1-qn。 ② 输入顶点表中各顶点要求按一定顺序排列,一般可采用顺时针或逆时针方向。 图5 多边形裁剪操作示意图 ③ 相对于裁剪窗口的各条边界,按顶点表中的顺序,逐条边进行裁剪。 具体操作: (1)Pi若位于边界线的可见一侧,则Pi送输出顶点表 (2)Pi若位于边界线的不可见一侧,则将其舍弃。 (3)除第一个顶点外,还要检查每一个Pi和前一顶点Pi-1是否位于窗口边界的同一侧,若不在同一侧,则需计算出交点送输出顶点表。 (4)最后一个顶点Pn则还要与Pi一起进行同样的检查。 三、算法实现 3.1、主窗体 如图6所示是图形剪裁的程序界面,首先根据提示双击鼠标左键出现需要剪裁的各种线段,然后点击快捷工具栏上的线段剪裁或菜单栏的线段剪裁,实现线段的剪裁。也可以双击鼠标右键出现待剪裁的多边形,然后选择多边形剪裁快捷工具或菜单栏的多边形剪裁,实现多边形的剪裁。(在界面的红色窗口外的线段或多边形就将被剪裁掉) 图6

文档评论(0)

qwd513620855 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档