区域填充扫描线算法实验报告.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文档。上传文档
查看更多
区域填充扫描线算法实验报告

期中作业 一 实验内容 区域填充扫描线算法:按照扫描线的顺序,计算扫描线与多边形的相交区间,再用要求的颜色显示这些区间的像素,完成填充工作。 二 算法描述 扫描线填充算法的基本思想是:用水平扫描线从上到下(或从下到上)扫描由多条首尾相连的线段构成的多边形,每根扫描线与多边形的某些边产生一系列交点。将这些交点按照x坐标排序,将排序后的点两两成对,作为线段的两个端点,以所填的颜色画水平直线。多边形被扫描完毕后,颜色填充也就完成了。扫描线填充算法也可以归纳为以下4个步骤: (1) 求交,计算扫描线与多边形的交点 (2) 交点排序,对第2步得到的交点按照x值从小到大进行排序; (3) 颜色填充,对排序后的交点两两组成一个水平线段,以画线段的方式进行颜色填充; (4) 是否完成多边形扫描?如果是就结束算法,如果不是就改变扫描线,然后转第1步继续处理; 整个算法的关键是第1步,需要用尽量少的计算量求出交点,还要考虑交点是线段端点的特殊情况,最后,交点的步进计算最好是整数,便于光栅设备输出显示。 Step1:将ET表中各元素置空,建立ET表 Step2:为多边形P的每一条边建立边结构按该边的上端点的y值y上插入ET表中的第y上类(组),即插入ET[y上]. Step3 :(初始化) AEL置空//AEL=Null y:ET表中非空元素的区域号最大值。 Step4:扫描转化 while(AEL or ET 非空) do {No.1 (边插入)如果ET[y]非空,则将ET[y]中各边插入AEL。 No.2 (排序)将AEL中的各边按照x(若x相等按Δx的递增顺序排序。 No.3(如果AEL非空填色)将AEL中各边依次组成对,在横坐标为y的扫描线上,将以每对边的x坐标为端点的区间上填上多边形所需要的颜色. No.4(下一条扫描线)y--。 No.5(边删除)将AEL中满足y=ymin的边删除。 No.6(边更新)将AEL中的各边x值更新,x=x+ Δx } 三 源代码 #include stdafx.h #include demo.h #include ChildView.h #include math.h #define Round(d) int(floor(d+0.5))//四舍五入宏定义 #ifdef _DEBUG #define new DEBUG_NEW #endif // CChildView CChildView::CChildView() { } CChildView::~CChildView() { } BEGIN_MESSAGE_MAP(CChildView, CWnd) ON_WM_PAINT() ON_WM_CREATE() ON_COMMAND(ID_DRAW_PIC, CChildView::OnDrawPic) END_MESSAGE_MAP() // CChildView 消息处理程序 BOOL CChildView::PreCreateWindow(CREATESTRUCT cs) { if (!CWnd::PreCreateWindow(cs)) return FALSE; cs.dwExStyle |= WS_EX_CLIENTEDGE; cs.style = ~WS_BORDER; cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS, ::LoadCursor(NULL, IDC_ARROW), reinterpret_castHBRUSH(COLOR_WINDOW+1), NULL); return TRUE; } void CChildView::OnPaint() { CPaintDC dc(this); // 用于绘制的设备上下文 // TODO: 在此处添加消息处理程序代码 DrawGraph(); // 不要为绘制消息而调用CWnd::OnPaint() } void CChildView::ReadPoint() //点表 { P[0].x = 50; P[0].y = 100; P[1].x = -150;P[1].y = 300; P[2].x = -250;P[2].y = 50; P[3].x = -150;P[3].y = -250; P[4].x = 0; P[4].y = -50; P[5].x = 100; P[5].y = -250; P[6].x = 300; P[6].y = 150; } void CChi

文档评论(0)

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

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

1亿VIP精品文档

相关文档