版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、期中作业一实验内容区域填充扫描线算法:按照扫描线的顺序,计算扫描线与多 边形的相交区间,再用要求的颜色显示这些区间的像素,完成填充工 作。二算法描述扫描线填充算法的基本思想是:用水平扫描线从上到下(或从下到上) 扫描由多条首尾相连的线段构成的多边形,每根扫描线与多边形的某 些边产生一系列交点。将这些交点按照x坐标排序,将排序后的点两 两成对,作为线段的两个端点,以所填的颜色画水平直线。多边形被 扫描完毕后,颜色填充也就完成了。扫描线填充算法也可以归纳为以 下4个步骤:(1)求交,计算扫描线与多边形的交点(2)交点排序,对第2步得到的交点按照x值从小到大进行排序;(3)颜色填充,对排序后的交点两
2、两组成一个水平线段,以画线段 的方式进行颜色填充;(4)是否完成多边形扫描?如果是就结束算法,如果不是就改变扫 描线,然后转第1步继续处理;整个算法的关键是第1步,需要用尽量少的计算量求出交点,还要考 虑交点是线段端点的特殊情况,最后,交点的步进计算最好是整数, 便于光栅设备输出显示。Stepl:将ET表中各元素置空,建立ET表Step2:为多边形P的每一条边建立边结构按该边的上端点的y值y 上插入ET表中的第y上类(组),即插入ETy上.Step3 :(初始化)AEL置空/AEL=Nully:ET表中非空元素的区域号最大值。Step4 :扫描转化while (AEL or ET 非空)doN
3、o.1 (边插入)如果ETy非空,则将ETy中各边插入AEL。No.2 (排序)将AEL中的各边按照x (若x相等按Ax的递增顺序排 序。No.3 (如果AEL非空填色)将AEL中各边依次组成对,在横坐标为y 的扫描线上,将以每对边的x坐标为端点的区间上填上多边形所需要 的颜色.No.4 (下一条扫描线)y 。No.5 (边删除)将AEL中满足y=ymin的边删除。No.6 (边更新)将AEL中的各边x值更新,x=x+ Ax 三源代码#include stdafx.h#include demo.h#include ChildView.h#include #define Round(d) int
4、(floor(d+0.5)/四舍五入宏定义#ifdef DEBUG #define new DEBUG_NEW#endif/ CChildViewCChildView: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(CREATE
5、STRUCT& 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_cast(COLOR_WINDOW+1), NULL);return TRUE;void CChildView:OnPaint()CPaintDC dc(this);
6、 /用于绘制的设备上下文/ TODO:在此处添加消息处理程序代码DrawGraph();/不要为绘制消息而调用CWnd:OnPaint()void CChildView:ReadPoint()/点表P0.x = 50; P0.y = 100;P1.x = -150;P1.y = 300;P2.x = -250;P2.y = 50;P3.x = -150;P3.y = -250;P4.x = 0;P4.y=-50;P5.x = 100; P5.y = -250;P6.x = 300; P6.y = 150;void CChildView:DrawPolygon(CDC *pDC)/绘制多边形边界
7、CLine *line = new CLine;CP2 t;for(int i = 0; i MoveTo(pDC, Pi);t = Pi;elseline-LineTo(pDC, Pi);line-LineTo(pDC, t);/闭合多边形delete line;void CChildView:DrawGraph()/绘制图形 TOC o 1-5 h z CRect rect;/定义客户区GetClientRect(&rect);/获得客户区的大小CDC *pDC = GetDC();/定义设备上下文指针pDC-SetMapMode(MM_ANISOTROPIC);/自定义坐标系pDC-Se
8、tWindowExt(rect.Width(), rect.Height();/设置窗口比例pDC-SetViewportExt(rect.Width(), -rect.Height();/设置视区比例,且x轴水平向右,y轴垂直向上pDC-SetViewportOrg(rect.Width() / 2, rect.Height() / 2);/设置客户区中心为坐标系原点rect.OffsetRect(-rect.Width() / 2, -rect.Height() / 2);矩形与客户区重合if(!bFill)DrawPolygon(pDC);/绘制多边形elseFillPolygon(pD
9、C);/填充多边形ReleaseDC(pDC);/释放DCvoid CChildView:FillPolygon(CDC *pDC) /填充多边形for(int i = 0; i SetPoint(P1, 7);fill-CreateBucket();fill-CreateEdge();fill-Gouraud(pDC);delete fill;/填充多边形/撤销内存int CChildView:OnCreate(LPCREATESTRUCT lpCreateStruct)if (CWnd:OnCreate(lpCreateStruct) = -1) return -1;/ TODO:在此添加您专用的创建代码bFill = FALSE;ReadPoint();return 0;void CChildView:OnDrawPic()/ TODO:在此添加命令处理程序代码COLORREF GetClr = RGB(0, 0, 0);/调色板颜色CColorDialog ccd(GetClr, CC_SOLIDCOLOR);if(IDOK = ccd.DoModal()/调用颜色对话框选取填充色GetClr = ccd.GetColor();
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 外研八下英语Unit 6 Developing ideas《合作探究二》课件
- 人教 八年级 语文 下册 第2单元《6.恐龙无处不有》课件
- 2025 网络基础中网络职业技能培训的网络教学模式创新课件
- 2025 高中信息技术数据结构在电商用户购买偏好变化跟踪课件
- 2026年客栈租房合同(1篇)
- 2026年消防系统维修合同(1篇)
- 2026年旅游代开发合同(1篇)
- 2026年及未来5年市场数据中国金融仓储物流中心建设行业发展监测及投资战略咨询报告
- 现代社会调查方法解析
- 2025 高中信息技术数据与计算之算法的萤火虫算法课件
- 中国艺术研究院社会招聘试题
- 2026年教育局思想政治工作科工作计划
- 2025年安徽卫生健康职业学院单招职业适应性测试试题及答案解析
- 医保村卫生室管理制度
- 陕西从优 秀村干部中考录乡镇公务员考试真题
- 2025年军事设施建设与管理规范
- 儿科学营养性vitD缺乏
- “党的二十届四中全会精神”专题题库及答案
- 厂房基础注浆加固施工方案
- 人工智能技术应用规范
- 无锡银税协议书
评论
0/150
提交评论