版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、宁夏师范学院数学与计算机科学学院计算机图形学实验报告实验序号:3实验项目名称:画线、画圆算法学号姓名专业、班2011级计本班2014. 10. 2014. 10. 16、 23实验地点指导教师Inn唳融日圈E曲 令HB地fflcAa ab| 国匪EE g3、在 Inputdialg 类中添加整型变量 m_startX,m_startY , m_endX , m_endY,m_circleR, m_MidPointX , m_MidPointY。可以同时对其赋初值,如图(2):Inputdialg:Inputdialg(CWnd* pParent /*=NULL*/) :CDialog(Inpu
2、tdialg:IDD, pParent) /i-3Hmnpv*-l H.CMbil a:回-Uk|riT叩Uli Ui-3Hmnpv*-l H.CMbil a:ILiHrfHCPtiiFBclrdeIDC EMTIIDC CMTJIf if: ffwi iIliCEEPI*icic Ewra-H3C CMTGinc FIWI7田心IHMIDPOHT5、再为对话框按钮添加映射函数:void Inputdialg:OnDda()/ TODO: Add your control notification handler code here释放设备指针UpdateData(TRUE);startX=m
3、_startX;startY=m_startY;endX=m_endX;endY=m_endY;UpdateData(FALSE);flag=true;pview-Invalidate();void Inputdialg:OnMidpoint()/ TODO: Add your control notification handler code hereUpdateData(TRUE);startX=m_startX;startY=m_startY;endX=m_endX;endY=m_endY;UpdateData(FALSE);flag2=true;pview-Invalidate();v
4、oid Inputdialg:OnBresenham()/ TODO: Add your control notification handler code here UpdateData(TRUE);startX=m_startX;startY=m startY;endX=m_endX;endY=m_endY;UpdateData(FALSE);flag3=true;pview-Invalidate();void Inputdialg:OnBresenhamcircle()/ TODO: Add your control notification handler code hereUpdat
5、eData(TRUE);MidPointX=m_MidPointX;MidPointY=m_MidPointY;circleR=m_circleR;UpdateData(FALSE);flag4=true;pview-Invalidate();6、要实现图像的显示还是需要通过视图类来实现,在ondraw()函数中添加如下代码:CClientDC dc(this);if(flag=true)DDALine(startX,startYendX,endY,RGB(0,255,0),dc);flag=false;if(flag2=true)MidBresenhamLine(startX,startYe
6、ndX,endY,RGB(255,0,0),dc);flag2=false;if (flag3=true)BresenhamLine(startX,startYendX,endY,RGB(255,0,255),dc);flag3=false;if (flag4=true)MidBresenhamCircle(MidPointX,MidPointYcircleR,RGB(250,0,100),dc);flag4=false;7、上一步中的flag,flag2,flag3,flag4都是未定义变量,需要再对其进行定 义,这次是对部变量的定义,(1)在 StdAx.h 添加:extern int s
7、tartX,startYendX,endY,circleR,MidPointX,MidPointY;extern bool flag,flag2,flag3,flag4;在 StdAfx.cpp 中添加:int startX,startY,endX,endY,circleR,MidPointX,MidPointY;bool flag,flag2,flag3,flag4;在 Inputdialg.cpp 中添加:extern CGraphicView *pview;extern int startX,startY,endX,endY,circleR,MidPointX,MidPointY;ext
8、ern bool flag,flag2,flag3,flag4;8、在 GraphicView.cpp 中定义 CGraphicView *pview=NULL;,要指针生效同样需要 初始化,如下:CGraphicView:CGraphicView()/ TODO: add construction code herepview=this;9、至此,准备工作做的是差不多了,但最重要的是还缺少实现函数,在视图类中添加如下函数:void CGraphicView:DDALine(int x0, int y0, int x1, int y1, int color,CClientDC &dc) /sl
9、eep 判断 是否直接画int dx,dy,eps1,k;float x,y,xIncre,yIncre;dx=x1-x0;dy=y1-y0;x=x0;y=y0;if(abs(dx)abs(dy)eps1=abs(dx);elseeps1=abs(dy);xIncre=(float)dx/(float)eps1;yIncre=(float)dy/(float)eps1;CPen newpen(PS_SOLID,1,color);dc.SelectObject(&newpen);for(k=0;k=eps1;k+)int a=(int)(x+0.5);int b=(int)(y+0.5);/dc
10、.Ellipse(a-1,b-1,a+1,b+1);dc.SetPixel(a,b,color);x+=xIncre;y+=yIncre;void CGraphicView:MidBresenhamLine(int x0,int y0,int x1,int y1,int color,CClientDC &dc) CPen newpen(PS_SOLID,1,color);dc.SelectObject(&newpen);if(x0=x1)/M 率不存在for(int i=y0;ix1)x=x1;x1=x0;x0=x;y=y1;y1=y0;y0=y;dx=x1-x0;dy=y1-y0;float
11、 k=(float)dy/(float)dx; /斜率if(k=0&k=1)x=x0;y=y0;d=dx-2*dy;UpIncre=2*dx-2*dy;DownIncre=-2*dy;while(x=x1)dc.Ellipse(x-1,y-1,x+1,y+1);x+;if(d1)x=x0;y=y0;d=2*dx-dy;UpIncre=-2*dx+2*dy;/佑DownIncre=-2*dx; /左 while(y=y1)dc.Ellipse(x-1,y-1,x+1,y+1);y+;if(d=-1&k=0)x=x0;y=y0;d=-dx-2*dy;UpIncre=-2*dx-2*dy;/下Dow
12、nIncre=-2*dy; 上 while(x0) 大于0,取下点y-; d+=UpIncre;elseelse if(k=y1) dc.Ellipse(x-1,y-1,x+1,y+1);y-;if(d0) 大于0,取右点 x+;d+=UpIncre;elsed+=DownIncre;void CGraphicView:BresenhamLine(int x0, int y0, int x1, int y1, int color,CClientDC &dc) CPen newpen(PS_SOLID,1,color);dc.SelectObject(&newpen);if(x0=x1)/斜 率
13、不存在 for(int i=y0;ix1)x=x1;x1=x0;x0=x;y=y1;y1=y0;y0=y;dx=x1-x0;dy=y1-y0;x=x0;y=y0;float k=(float)dy/(float)dx;/斜率if(k=0&k=1) e=-dx;while(x0)y+;e-=2*dx;else if(k1)e=-dy;while(y0)x+;e-=2*dy;else if(k=-1&k=0)e=-dx;while(x=x1)dc.Ellipse(x-1,y-1,x+1,y+1);x+;e+=2*dy;if(e=0)y-;e+=2*dx;else if(k=y1)dc.Ellips
14、e(x-1,y-1,x+1,y+1);y-;e+=2*dy;/e+kif(e0) x+; e-=2*dy; void CGraphicView:MidBresenhamCircle(int MidPointX,int MidPointY,int r,int color,CClientDC &dc) CPen newpen(PS_SOLID,1,color);dc.SelectObject(&newpen);int x,y,d; /x为中点x坐标x=0;y=r;d=1-r;while(x=y)dc.SetPixel( x+MidPointX, y+MidPointYcolor);dc.SetPi
15、xel(-x+MidPointX, y+MidPointYcolor);dc.SetPixel(-x+MidPointX,-y+MidPointYcolor);dc.SetPixel( x+MidPointX,-y+MidPointYcolor);dc.SetPixel( y+MidPointX, x+MidPointYcolor);dc.SetPixel(-y+MidPointX, x+MidPointYcolor);dc.SetPixel(-y+MidPointX,-x+MidPointYcolor);dc.SetPixel( y+MidPointX,-x+MidPointY,color);if(d MM MNW
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年初级新能源车辆外观年检检查考试试卷及答案
- 2026年北京市公务员招考申论大作文结尾升华训练模拟试卷及答案
- 2026年眼科机动护士应急考核测评试卷及答案
- 深蓝色简约风瑞幸咖啡营销策划分析方案
- 2026秋小学冀人版科学五年级上册第二单元 简单机械《4 撬棍的学问》教学设计
- 2026年北京市社区工作者招聘考试试卷2含答案和解析
- 2026年电工技师证考试题库及答案
- 2026年秋学期小学英语沪教版(深圳)五年级上册教学计划附教学进度表
- 2026年医院科室收费自查报告及整改措施(2篇)
- 炼钢原料加工工成果转化评优考核试卷含答案
- 2025年4月自学考试中国古代文学史(二)00539试卷及答案解释完整版
- GB/T 12823.2-2026摄影和图形技术密度测量第2部分:透射密度的几何条件
- DB53T 168-2013 云南省用水定额
- 超声引导关节腔注射
- 泥结石路面施工方案
- 环保设备制造工艺流程手册
- 老年叙事视角下的《赎罪》:人生忏悔的探讨
- 分布式光纤传感技术及应用
- 第4课 科技力量大 第三课时(课件)2025-2026学年道德与法治三年级上册统编版
- 生物情境教学课件
- 心内科出科讲课
评论
0/150
提交评论