直线裁减,多边形裁剪[1]

上传人:ji****n 文档编号:46007681 上传时间:2018-06-20 格式:DOC 页数:12 大小:200KB
返回 下载 相关 举报
直线裁减,多边形裁剪[1]_第1页
第1页 / 共12页
直线裁减,多边形裁剪[1]_第2页
第2页 / 共12页
直线裁减,多边形裁剪[1]_第3页
第3页 / 共12页
直线裁减,多边形裁剪[1]_第4页
第4页 / 共12页
直线裁减,多边形裁剪[1]_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《直线裁减,多边形裁剪[1]》由会员分享,可在线阅读,更多相关《直线裁减,多边形裁剪[1](12页珍藏版)》请在金锄头文库上搜索。

1、实验报告学院:计算机科学与信息学院 专业:计算机科学与技术 班级:07 软件2姓名学号实验组实验时间2010-5-10指导教师成绩实验项目名称直线裁减,多边形裁剪实验目的掌握常用的裁减及消隐算法:直线、多边形的裁减。在 MFC 上实现基本算法。实验要求在其中的一种算法中中选取一种完成直线的裁减算法。实验原理Cohen-SutherLand 算法(编码算法)直线算法原理直线算法原理对于每条线段 P1P2分为三种情况处理: (1)若 P1P2完全在窗口内,则显示该线段 P1P2。 (2)若 P1P2明显在窗口外,则丢弃该线段。 (3)若线段不满足(1)或(2)的条件,则在交点处把线段分为两段。其

2、中一段完全在窗口外,可弃之。然后对另一段重复上述处理。 为快速判断,采用如下编码方法: 由窗口四条边所在直线把二维平面分 成 9 个区域(右图),每个区域赋予一个四 位编码:CtCbCrCl(上下右左) ;直线的端点都按其所处区域赋予相应的区域码, 用来标识出端点相对于裁剪矩形边界的位 置。 各位编码含义: 上:if yymax,Ct=1,else, 0; 下:if yxmax,Cr=1,else, 0; 左:if xxmax,Cl=1,else, 0;对某线段的两个端点的区号进行位与运算,可知这两个端点是否同在视区的上、下、左、右;如果两端点的编码均为 0000,表示直线在窗口内。如果两端点

3、的编码相与不为 0000,表示直线在窗口外。如果两端点的编码不全为 0000,但相与为 0000,则该直线部分可见,需计算直线与窗口的交点,确定哪一部分可见。(2)Sutherland-Hodgema 算法(多边形裁减算法原理)通过对单一边或面的裁剪来实现多边形的裁剪分割处理策略:将多边形关于矩形窗口的裁剪分解为多边形关于窗口四边所在直线的裁剪。一次用窗口的一条边裁剪多边形。流水线过程(左上右下):前边的结果是后边的输入。亦称逐边裁剪算法。算法的每一次输出(包括中间结果)都是一个多边形的顶点表,且所有顶点均位于相应窗口裁剪边或面的可见一侧。由于多边形的每一条边需要与裁剪边或面分别进行比较,因此

4、只需要讨论单条边和单个裁剪边或面之间可能的位置关系。假设 S,P 为多边形的两个相邻顶点,且 S 为该边的起点,P 为该边的终点,则变 SP 与裁剪边或面之间只有 4 种可能的关系把平面分成两个部分:一部分包含窗口,成为可见一侧;另一部分称为不可见一侧。依序考虑多边形各边的两端点 S,P。它们与裁剪线的位置关系只有 4 中情况。可见一侧 S 可见一侧PS P(1)S,P 均在可见一侧,计为 P 点 (2)S,P 均不在可见一侧P 可见一侧 可见一侧PS S(3)S 可见,P 不可见 (4)S 不可见,P 可见由上可见,每一次将多边形的边与裁剪边或面比较后,输出一个或两个顶点,也可能无输出点。如

5、果 SP 边完全可见,则输出 P 点,不必输出起点 S,因为顶点是按顺序处理的,S 是作为前一边的终点输出的。如果 SP边完全不可见,则无输出。如果 SP 边部分可见,则 SP 边可能进入或离开裁剪边或面的可见一侧。 如果 SP 边离开裁剪边或面的可见一侧,则输出SP 与裁剪边或面交点。如果 SP 边进入裁剪边或面的可见一侧,则输出两点,一个为 SP 与裁剪边或面的交点,一个是 P 点。对于多边形的第一个顶点,只需判断其可见性。如果可见,则输出且作为起点 S;否则无输出,但还是要作为 S 保存,以便后续点处理。对于最后一条边 PnP1,其处理方法是:标志第一顶点为 F,这样最后一条边则为 Pn

6、F,可与其他边作相同的处理。实现方法:设置二个表: 输入顶点表:用于存放被裁剪多边形的顶点 p1-pm。 输出顶点表:用于存放裁剪过程中及结果的顶点 q1-qn。输入顶点表中各顶点要求按一定顺序排列,一般可采用顺时针或逆时针方向。相对于裁剪窗口的各条边界,按顶点表中的顺序,逐边进行裁剪实验环境Visual studio VC+ 6.0实验步骤1.根据 Cohen-Sutherland 直线剪裁算法思想,编写相应的程序,下面给出核心算法程序(1)如下为编码函数:(2)裁剪算法:(3)运行后的界面如下:2.Sutherland-Hodgema 算法剪裁算法思想,编写相应的程序,下面给出主要代码:(

7、1)算法描述:算法描述:1. while 对于每一个窗口边或面 dobegin2.if P1在窗口边的可见一侧 then 输出 P13. for i=1 到 n dobegin4. if Pi在窗口边的可见一侧 then5.if Pi+1在窗口边的可见一侧 then 输出 Pi+16. else 计算交点并输出交点7.else if Pi+1在窗口边的可见一侧,then计算交点并输出交点,同时输出 Pi+1endend8. end of algorithm (2)代码实现实验内容本程序实现了标准举行窗口对任意直线和任意多边形的裁减算法,具体查看试验结果。实验结果1.对直线裁剪运行的结果如下:(

8、1)点击“画直线” ,在绘图区用鼠标绘制举行裁切窗口(2)点击“画矩形” ,在绘图去用鼠标绘制要被裁切的直线。如图:(3)点击“裁剪” ,实行相应算法完成裁减,如下图:2.对多边形裁剪运行的结果如下:(1)运行的界面如下:(2)用鼠标拖动画一个多边形,如下其中红色部分表示裁剪后的结果实验总结1、通过本次试验,我对 Cohen-Sutherland 直线剪裁算法和Sutherland-Hodgman 多边形裁剪算法有了更深刻的了解。2、进行图形裁剪时,首先在课堂上了解了有关裁剪算法的过程,然后在进行代码的实现。3、在做实验的时候也遇到了些问题,由于对算法的细节有些问题,使得代码编写中出现了错误。经过了讨论研究,使得问题得以解决,从这个过程中学习到了很多东西。这次实验让我受益匪浅。指导教师意见签名: 年 月 日

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号