- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 2021届北京市海淀高三语文一模阅读部分讲评 课件(150张PPT).pptx
- 背负式风力灭火机的操作与使用 .ppt VIP
- 苏州七年级月考试卷及答案.doc VIP
- 山东科学技术版劳动实践指导手册三年级第11课公益劳动与志愿服务校园公益劳动清洁美化校园我行动 教案.docx VIP
- 2025年中级审计师测试题习题.docx VIP
- 一、毕业设计(论文)的目的和意义.doc VIP
- 四川大学软件学院2008级毕业设计启动会课程设计.ppt VIP
- 2025全科医生考试题及答案.docx VIP
- 大班科学标准教案小油滴不见了.pptx VIP
- 2024年隆昌市兴诚投资集团有限公司人员招聘考试题库及答案解析.docx VIP
文档评论(0)