实验三指导书解析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验三 区域填充与直线的裁剪 1.实验目的: 1)实现。种算法描述1) 多边形 由一系列首尾相连的直线段构成的图形称为多边形。如果在多边形内任意选取不相同的两点,其连线上的所有点均在该多边形内,这样的多边形称为凸多边形;否则,称为凹多边形。2) 种子填充算法 种子填充算法又称为边界填充算法。其基本思想是:从多边形区域的一个内点开始,由内向外用给定的颜色画点直到边界为止。如果边界是以一种颜色指定的,则种子填充算法可逐个像素地处理直到遇到边界颜色为止。 种子填充算法常用四连通域和八连通域技术进行填充操作。 从区域内任意一点出发,通过上、下、左、右四个方向到达区域内的任意像素。用这种方法填充的区域就称为四连通域;这种填充方法称为四向连通算法。 从区域内任意一点出发,通过上、下、左、右、左上、左下、右上和右下八个方向到达区域内的任意像素。用这种方法填充的区域就称为八连通域;这种填充方法称为八向连通算法。 一般来说,八向连通算法可以填充四向连通区域,而四向连通算法有时不能填充八向连通区域。例如,八向连通填充算法能够正确填充如图2.4a所示的区域的内部,而四向连通填充算法只能完成如图2.4b的部分填充。 四向连通填充算法 a) 连通域及其内点 b) 填充四连通域 四向连通填充算法: a) 种子像素压入栈中; b) 如果栈为空,则转e);否则转c); c) 弹出一个像素,并将该像素置成填充色;并判断该像素相邻的四连通像素是否为边界色或已经置成多边形的填充色,若不是,则将该像素压入栈; d) 转b); e) 结束。 四向连通填充方法可以用递归函数实现如下: 四向连通递归填充算法: void BoundaryFill4(int x, int y, long FilledColor, long BoundaryColor) { long CurrentColor; CurrentColor = GetPixelColor(x,y); if (CurrentColor != BoundaryColor CurrentColor != FilledColor) { SetColor(FilledColor); SetPixel (x,y); BoundaryFill4(x+1, y, FilledColor, BoundaryColor); BoundaryFill4(x-1, y, FilledColor, BoundaryColor); BoundaryFill4(x, y+1, FilledColor, BoundaryColor); BoundaryFill4(x, y-1, FilledColor, BoundaryColor); } } 上述算法的优点是非常简单,缺点是需要大量栈空间来存储相邻的点。一个改进的方法就是:通过沿扫描线填充水平像素段,来处理四连通或八连通相邻点,这样就仅仅只需要将每个水平像素段的起始位置压入栈,而不需要将当前位置周围尚未处理的相邻像素都压入栈,从而可以节省大量的栈空间。 3) 其它填充算法 扫描线填充算法是另一个常用的多边形填充算法。其基本思想是:对于一个给定的多边形,用一组水平或垂直的扫描线进行扫描,分别求出每条扫描线与多边形的交点,这些交点将扫描线分割为相间排列的落在多边形内和多边形外的线段,将落在多边形内的所有线段上的每个像素点赋以给定的多边形填充色。 直线裁剪 一、Cohen-Sutherland 裁剪算法 这个算法的特点是:通过初始测试来快速判断线段与视区的关系,以便减少线段求交的次数,从而提高裁剪算法的速度。区域编码 假定以相对的两个角点(xmin,ymin)和(xmax,ymax)来表示一个矩形裁剪区域。如图3.9所示,将二维平面分区,中间的矩形为裁剪区域。每个区以四位代码(称为区域码)表示,代码的编号从右到左,各位与坐标区域的关系为: 位1:左; 位2:右; 位3:下; 位4:上。 如果某一位赋值为1,则表示端点落在相应的位置上,否则该位值为0。 通过比较端点的坐标与裁剪边界的坐标,可以迅速地决定区域码各位的值。例如:如果xxmin,则第一位置1;其它三位的值依此类推。对某线段的两个端点的区域码进行位与运算,可以快速判断哪条线段完全在裁剪窗口内,哪条线段完全在裁剪窗口外。完全在裁剪窗口内的线段的两个端点的区域码均为0000,该线段应当保留。两个端点的区域码的相同位的值都为1的线段则完全落在裁剪区域之外,该线段应当去除。例如,若线段的两端点的区域码分别为:code1=0101,code2=0110,则code1 code2=0100,表示该线段位于裁剪窗口的下

文档评论(0)

三哥 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档