4.3区域填充.ppt.Convertor.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文档。上传文档
查看更多
4.3区域填充.ppt.Convertor

4.3二维图形的填充 南京农业大学 谢忠红 C语言里的两个函数 (那两个?完整的形式?) 4.3.1种子填充算法 本节内容: 介绍实现图形填充的一些基本算法。 (1) 确定哪些像素位于填充图元的内部; (2)确定以什么颜色填充这些像素; (1)矩形的填充方法(规则形状)(fill_rec2) (应定义一个什么结构体?) void FillRectangle(Rectangle *rect,int color) { int x,y; for(y = rect-ymin;y = rect-ymax;y++) for(x = rect-xmin;x = rect-xmax;x++) PutPixel(x,y,color); } /*end of FillRectangle() */ (2)逐点判断法 (不规则形状的多边形) 方法:逐个判断绘图窗口中的像素,如果在多边形内,则给予相应的色彩,如果不在多边形内则赋予背景色彩。 #define MAX 100 Typedef struct { int PolygonNum; // 多边形顶点个数 Point vertexces[MAX] //多边形顶点数组 } Polygon // 多边形结构 定义一个多边形的结构体 逐点判断法 void FillPolygonPbyP( Polygon *P, int Color) { int x,y; for(y = ymin;y = ymax;y++) for(x = xmin;x = xmax;x++) if(IsInside(P,x,y)) //在多边形内 PutPixel(x,y,Color); else //在多边形外 PutPixel(x,y,backgroundColor); } 引起一个问题, 射线法判断像素点在多边形内还是外 步骤: 从待判别点v发出射线 求交点个数k K的奇偶性决定了点与多边形的内外关系 (奇数个交点在内部偶数个交点在外面) 逐点判断法的优缺点 优点:程序简单, 缺点:速度太慢 主要原因:计算量太大,费时 由于该算法割断了各象素之间的联系,孤立地考察各象素与多边形的内外关系,使得几十万甚至几百万个象素都要一一判别,每次判别又要多次求交点,需要做大量的乘除运算,花费很多时间。 (3)种子填充法 基本思路: 首先假设在多边形区域的内部,至少有一个像素(称为种子)是已知的。然后算法开始搜索与种子点相邻且位于区域内的其它像素。如果相邻点不在区域内,那么到达区域的边界;如果相邻点位于区域内,那么这一点就成为新的种子点,然后继续递归地搜索下去。 4-连通 8-连通 种子填充算法 左上角(left,top)右下角(right,bottom)的矩形 void fill(int x,int y,int newcolor) { if( ((xleft)(xright))((ytop)(ybottom))){ if ( getpixel(x,y)!=newcolor) { putpixel(x,y,newcolor) ; //设置(x,y)点为新颜色 } } 试写出八领域的矩形填充算法? fill(x,y+1,newcolor) ; //下 fill(x,y-1,newcolor) ; //上 fill(x-1,y,newcolor); //左 fill(x+1,y,newcolor); //右 void fill(int x,int y,int newcolor) { if( ) { if (getpixel(x,y)!=newcolo

文档评论(0)

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

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

1亿VIP精品文档

相关文档