ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:64.85KB ,
资源ID:12158494      下载积分:6 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-12158494.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机图形学实验报告实验3.docx)为本站会员(b****8)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

计算机图形学实验报告实验3.docx

1、计算机图形学实验报告实验3贵州大学第三次实验报告学院:计算机科学与技术 专业:计科 班级:101姓名吕杨学号 1008060040同组成员实验时间2010-4-14指导教师吴云成绩实验项目名称多边形填充算法实验目的1、掌握用扫描线法、边缘填充法、种子填充法种子填充算法或扫描线填充算法填充任一多边形区域的方法,并编程实现。2、掌握4连通与8连通区域的扩展性3、掌握用堆栈结构实现种子算法实验要求1、用一种填充算法对一多边形进行填充2、写出该填充算法的基本原理。3、写出该填充算法的程序实验原理区域填充的扫描线算法算法的基本过程如下:给定种子点(x,y),首先填充种子点所在扫描线上给定区域的一个区段,

2、然后确定与这一区段相连通的上、下两条扫描线上位于给定区域内的区段,并依次保存下来。反复这个过程,直到填充结束。区域填充的扫描线算法可由下列3个步骤实现。(1)初始化:确定种子点元素(x,y)。(2)判断种子点(x,y)是否满足非边界、非填充色的条件,若满足条件,以y作为当前扫描线沿当前扫描线向左、右两个方向填充,直到边界。(3)确定新的种子点:检查与当前扫描线y上、下相邻的两条扫描线上的像素。若存在非边界、未填充的像素,则返回步骤(2)进行扫描填充。直至区域所有元素均为填充色,程序结束。实验环境操作系统:Windows XP 编程环境:VC+ 6.0实验步骤1. 创建单文档应用程序框架2 编辑

3、菜单资源3 添加消息处理函数4 程序结构代码,在CMyView.cpp文件中相应位置添加代码实验内容 (1)创建应用程序框架 (2)编辑菜单资源。在工作区的ResourceView标签中,单击Menu项左边“+”,然后双击其子项IDR_MAINFRAME,并根据表中的定义添加编辑菜单资源。此时建好的菜单如图所示。 菜单资源表菜单标题标示符ID多边形扫描填充ID_WUJIAOXING清屏ID_CLEAR封闭多边形ID_CLOSE填充ID_Fill(3)添加消息处理函数。利用ClassWizard(建立类向导)为应用程序添加与菜单项相关的消息处理函数,ClassName栏中选择CMyView,根据

4、表建立如下的消息映射函数,ClassWizard会自动完成有关的函数声明。菜单项的消息处理函数菜单项ID消 息消息处理函数ID_WUJIAOXINGCONMMANOnWujiaoxingID_CLOSECONMMANOnCloseID_CLEARCONMMANOnClearID_FillCONMMANOnFill(4)添加程序结构代码。 在“Test1View.h”适当位置添加以下黑体字部分代码typedef struct tEdge int yUpper; float xIntersect,dxPerScan; struct tEdge * next;Edge;class CTest1Vie

5、w : public CViewprotected: / create from serialization only CTest1View(); DECLARE_DYNCREATE(CTest1View)/ Attributespublic: CTest1Doc* GetDocument();/ Operations 在OnDraw()函数中添加如下黑体字部分代码void CTest1View:OnDraw(CDC* pDC) CTest1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); / TODO: add draw code for nati

6、ve data here CPoint pt11; if(iswujiao) pt0.x=181; pt0.y=26, pt1.x=143; pt1.y=133; pt2.x=19; pt2.y=133; pt3.x=119; pt3.y=199; pt4.x=82; pt4.y=306; pt5.x=181; pt5.y=242; pt6.x=279; pt6.y=305; pt7.x=242; pt7.y=199; pt8.x=342; pt8.y=133; pt9.x=218; pt9.y=133; pt10.x=181; pt10.y=26; pDC-MoveTo(pt0); for(

7、int i=1;iLineTo(pti); scanfill(11,pt); if(isFill) CPoint *pt1=new CPointptnum; for(int i=0;iMoveTo(pt10); for(i=1;iLineTo(pt1i); pDC-LineTo(pt10); 在菜单项的消息处理函数实体中添加以下黑体字部分代码 实验结果运行界面如下: 选择黑色进行填充填充之后结果如下: 实验总结通过此次试验,我对多边形填充算法有了更深的理解,对其算法的实现和编程有了进一步的了解。通过对多边形填充算法的编程。实现了对一个多边形的颜色填充,让我更加熟练了对VC+编程的能力的同时,也

8、了解了程序设计与图形学科的紧密联系关系,对以后的图形学的学习打下了良好的基础。指导教师意见签名: 年 月 日附:各控件代码程序:void CTest1View:insertEdge(Edge *list, Edge *edge)Edge * p,* q=list; p=q-next; while (p!=NULL) if(edge-xIntersectxIntersect) p=NULL; elseq=p; p=p-next; edge-next=q-next; q-next=edge;int CTest1View:yNext(int k, int cnt, CPoint *pts) int

9、j; if(k+1)(cnt-1) j=0; else j=k+1; while (ptsk.y=ptsj.y) if(j+1)(cnt-1) j=0; else j+; return(ptsj.y);void CTest1View:makeEdgeRec(CPoint lower, CPoint upper, int yComp, Edge *edge, Edge *edges) edge-dxPerScan=(float)(upper.x-lower.x)/(upper.y-lower.y); edge-xIntersect=lower.x; if(upper.yyUpper=upper.

10、y-1; else edge-yUpper=upper.y; insertEdge(edgeslower.y,edge);void CTest1View:buildEdgeList(int cnt, CPoint *pts, Edge *edges) Edge * edge; CPoint v1,v2; int i,yPrev=ptscnt-2.y; v1.x=ptscnt-1.x; v1.y=ptscnt-1.y; for (i=0;icnt;i+) v2=ptsi; if (v1.y!=v2.y) edge=(struct tEdge *)malloc(sizeof(struct tEdg

11、e); if(v1.ynext; while (p) q=p-next; insertEdge(active,p); p=q; void CTest1View:fillScan(int scan, Edge *active) CClientDC dc(this); Edge * p1, *p2; int i; p1=active-next; while (p1) p2=p1-next; for (i=p1-xIntersect;ixIntersect+1;i+) /putpixel(int)i,scan,color); / putpixel(int)i,scan,color); dc.SetP

12、ixel(int)i,scan,RGB(255,255,0); p1=p2-next; void CTest1View:deleteAfter(Edge *q) Edge * p=q-next; q-next=p-next; free(p);void CTest1View:updateActiveList(int scan, Edge *active) Edge * q=active,*p=active-next; while (p) if (scan=p-yUpper) p=p-next; deleteAfter(q); else p-xIntersect=p-xIntersect + p-

13、dxPerScan; q=p; p=p-next; void CTest1View:resortActiveList(Edge *active) Edge * q,* p=active-next; active-next=NULL; while (p) q=p-next; insertEdge(active,p); p=q; void CTest1View:scanfill(int cnt, CPoint *pts) Edge * edgesWindow_Height, * active; int i,scan; for (i=0;inext=NULL; buildEdgeList(cnt,p

14、ts,edges); active=(struct tEdge *)malloc(sizeof(struct tEdge); active-next=NULL; for (scan=0;scannext) fillScan(scan,active); updateActiveList(scan,active); resortActiveList(active); void CTest1View:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defau

15、lt / isFill=!isFill; / Invalidate(); ptnum+; CDC *pDC=GetDC(); CPoint temp; m_ptptnum=point; if(ptnum=0) pDC-MoveTo(m_pt0); else pDC-MoveTo(m_ptptnum-1); pDC-LineTo(m_ptptnum); / Invalidate(); CView:OnLButtonDown(nFlags, point);void CTest1View:OnCancelMode() CView:OnCancelMode(); / TODO: Add your me

16、ssage handler code herevoid CTest1View:OnDrawpoint() / TODO: Add your command handler code here isFill=false; iswujiao=false; void CTest1View:OnClose() / TODO: Add your command handler code here CClientDC dc(this); dc.MoveTo(m_pt0); dc.LineTo(m_ptptnum);void CTest1View:OnFill() / TODO: Add your comm

17、and handler code here isFill=true; iswujiao=false; Invalidate();void CTest1View:OnWujiaoxing() / TODO: Add your command handler code here iswujiao=true; isFill=false; Invalidate();void CTest1View:OnClear() / TODO: Add your command handler code here iswujiao=false; isFill=false; ptnum=-1; Invalidate();

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2