实验四参考-多媒体探讨.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验四 基本图形处理技术(一) 区域填充算法 一、实验目的 编写区域填充算法程序,验证算法的正确性。验证线型与线宽处理技术。 二、实验任务 多边形有序边表算法程序设计(多边形扫描线转换算法,这种方法了解即可,用来作为和扫描线种子填充算法的比较)。 扫描线种子填充算法程序设计(区域填充); 比较两种方法之间的区别。 三、实验内容 画出蓝色边界的多边形: 各个顶点坐标如下:P0 (50,50), P1 (400,50), P2 (400,300), P3 (150,300), P4 (150,400),P5 (50,400)。 提示:用“扫描线种子填充算法”可在OnDraw函数中添加如下代码 //定义画笔颜色,CPen画笔是绘图的基本工具,在MFC中画笔是CPen类的对象,它用来在DC上完成绘制线条的任务。 CPen PenBlue(PS_SOLID,1, color);//定义画笔颜色 // CPen(Int style,int width ,COLORREF color); //style:画笔的样式, PS_SOLID表示实线 //width:画笔的宽度 //color:画笔的颜色(颜色用RGB值来描述) //用画笔画出多变形的边界 pDC-SelectObject(PenBlue); // polygon[]用来确定多边形,先确定各个顶点,然后按顺序连接各个顶点 POINT polygon[6]={{50,50},{400,50},{400,300},{150,300},{150,400},{50,400}}; pDC-Polygon(polygon,6); 对多边形进行填充,颜色为红色。注:多边形有序边表算法与扫描线种子填充算法两种方法。提示:用“扫描线种子填充算法”调用填充函数可在OnDraw函数中添加如下代码: //定义种子位置,背景色oldcolor和填充色newcolor //x=300;y=200; (实验内容第3题的5边形用此) x=150;y=150;// (实验内容第2题的6边形用此) COLORREF newcolor=RGB(255,0,0); COLORREF oldcolor=RGB(255,255,255); //调用扫描线填充算法程序 ScanLineFill4(x,y, oldcolor,newcolor); 3.若各个顶点坐标改为:P0 (300,120), P1 (390,160), P2 (430,320), P3 (180,300), P4 (150,240)。 请用两种方法画出填充图元,看看有什么结果,为什么会出现这种结果。 四、实验代码参考 1. 多边形有序边表算法程序设计(多边形扫描线转换算法,这种方法了解即可,用来作为和扫描线种子填充算法的比较)。 多边形有序边表算法(扫描线转换 算法)原理: 算法描述:扫描线填充算法一般包括四个步骤:求交、排序、交点配对、区域填充。正确求得扫描线与区域填内外轮廓线的交点是算法成败的关键问题。另一方面,采用合适的数据结构又可以简化操作、提高算法的效率。本论文由于采用链表结构记录轮廓线和交点,无需焦点排序的过程,因而提高了算法效率。扫描线来源于光栅显示器的显示原理:对于屏幕上所有待显示像素的信息,将这些信息按从上到下、自左至右的方式显示。 扫描线多边形区域填充算法是按扫描线顺序,计算扫描线与多边形的相交区间,再用要求的颜色显示这些区间的象素,即完成填充工作。区间的端点可以通过计算扫描线与多边形边界线的交点获得。对于一条扫描线,多边形的填充过程可以分为四个步骤: (1)求交:计算扫描线与多边形各边的交点; (2)排序:把所有交点按x值递增顺序排序; (3)配对:第一个与第二个,第三个与第四个等等;每对交点代表扫描线与多边形的一个相交区间; (4)填色:把相交区间内的象素置成多边形颜色; 算法流程 ① 初始化:构造边表ET,置AET表为空; ② 将第一个不空的ET表中的边插入AET表; ③ 由AET表取出交点进行配对(奇偶)获得填充区间,依次对这些填充区间着色; ④ y=yi+1时,根据x=xi+1/k修改AET表所有结点中交点的x坐标。同时如果相应的ET表不空,则将其中的结点插入AET表,形成新的AET表; ⑤ AET表不空,则转(3),否则结束。 代码:可在OnDraw函数中添加如下代码: const int POINTNUM=6; //多边形点数. /******定义结构体用于活性边表AET和新边表NET********************************/ typedef struct XET { float

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

我是一名原创力文库的爱好者!从事自由职业!

1亿VIP精品文档

相关文档