计算机图形学 实验三 二维图形的区域填充.docxVIP

计算机图形学 实验三 二维图形的区域填充.docx

  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)加深对填充算法的理解,分析比较种子填充和边缘填充的差异。2)掌握二维图形区域种子填充的原理和算法。二、实验步骤1)对任意多边形的几何形状进行分析,选定比较合适的算法模型。2)画出程序流程图;3)编写程序的源程序;4)编辑源程序并进行调试;5)进行特殊模式的运行测试,并结合情况进行调整。三、实验内容用种子填充算法编写程序实现区域填充,并能在计算机上编译运行,正确地实现任意多边形边界的单色填充。原理边界填充算法可以让用户首先勾画图的轮廓,选择填充颜色和填充模式,然后拾取内部点,系统就可以自动给图的内部涂上所需要的颜色和图案。该算法的输入是种子点坐标 ( x , y )、填充色和边界颜色。算法从( x , y )开始检测相邻位置是否是边界颜色,若不是,就用填充色着色,并检测其相邻位置。该过程延续到已经检测完区域边界颜色范围内的所有像素为止。使用栈结构来实现4-连通边界填充算法的算法步骤如下:(1)种子像素入栈。(2)执行如下三步操作:1 栈顶像素出栈。2 将出栈像素置成填充色。3 检查出栈像素的4-邻接点,若其中某个像素不是边界色且未置成多边形色,则把该像素入栈。(3)检查栈是否为空,若栈非空重复执行步骤(2),若栈为空则结束。边界填充算法可以用于填充带有内孔的平面区域。其缺点是把太多的像素压入堆栈,有些像素甚至会入栈多次,这样一方面降低了算法的效率,另一方面还要求很大的存储空间以实现栈结构。将之改进,可构造沿扫描线填充水平像素段的4-连通边界填充算法,其算法步骤如下:(1)种子像素入栈。(2)执行如下三步操作:1 栈顶元素出栈。2 填充出栈元素所在扫描行的连续像素段,从出栈的像素开始沿扫描线向左和向右填充,直到遇到边界像素为止,即每出栈一个像素,就对包含该像素的整个扫描线区间进行填充,并且记录下此时扫描线区间的x坐标范围[ x1, x2 ]。3 分别检查上、下两条扫描线上位于[ x1, x2 ]坐标区间内的未被填充的连续水平像素段,将每个连续像素段的最左像素取作种子像素压入堆栈。(3)检查栈是否为空,若栈非空重复执行步骤(2),若栈为空则结束。流程图为:图形描述:程序的源程序:functiontianchong(x,y)x1=10*[1,3,7,12];y1=10*[7,12,8,9];x2=10*[1,3,6,8,12];y2=10*[7,1,5,1,9];plot(x1,y1,-,linewidth,2,color,r);pause(1);holdon;plot(x2,y2,-,linewidth,2,color,r);gridon;holdon;pause(1);for x=10:1:30for y=10:1:120if y2.5*x+45y-3*x+100plot(x,y,*,color,g);endendendpause(1);for x=30:60for y=10:120if y-x+150y(4/3)*x-30plot(x,y,*,color,g);endendendpause(1);for x=60:70for y=10:90if y-2*x+170y-x+150plot(x,y,*,color,g);endendendpause(1);for x=70:80for y=10:85if y-2*x+170y0.2*x+66plot(x,y,*,color,g);endendendpause(1)for x=80:120for y=10:90if y2*x-150y0.2*x+66plot(x,y,*,color,g);endendend四、实验总结本次实验实习,通过所学区域填充算法,用Matlab算法编程,实现区域填充,在编程中又对区域填充算法有了进一步的加深了解。在编写程序过程中,我认为这次程序最重要的是在每一步填充时计算不能出错,只要有一个循环出现错误,算法就不能实现。通过这次实习,我认识到了逻辑的重要性,在编写程序过程中不仅要对算法熟练掌握,要对Matlab语言熟悉,还要有清晰的逻辑思维。

文档评论(0)

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

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档