欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

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

    • 资源ID:12158494       资源大小:64.85KB        全文页数:15页
    • 资源格式: DOCX        下载积分:6金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要6金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    计算机图形学实验报告实验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();


    注意事项

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

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


    收起
    展开