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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

计算机图形学画线画圆算法.docx

1、计算机图形学画线画圆算法宁夏师范学院数学与计算机科学学院计算机图形学实验报告实验序号: 3 实验项目名称: 画线、画圆算法学号姓名专业、班实验地点指导教师时 间一、实验目的:1、环境要求:Microsoft Visual C+ 6.0二、实验内容与步骤 1、首先建立一个单文档的MFC项目Graphic。 2、接下来使用对话框控件设计好如图(1)对话框界面,并且创建新类Inputdialg,其基类为Dialog,再对菜单栏进行设计,让其与对话框映射起来。 3、在Inputdialg类中添加整型变量 m_startX,m_startY,m_endX,m_endY,m_circleR,m_MidPo

2、intX ,m_MidPointY 。可以同时对其赋初值,如图(2):4、接下来是将以上变量与对话框中的编辑框中值映射,需要通过添加DoDataExchange函数进行值的交换,然后进入类向导(ctrl+W),选择成员变量选项,进行如下映射:5、再为对话框按钮添加映射函数:void Inputdialg:OnDda() / TODO: Add your control notification handler code here /释放设备指针 UpdateData(TRUE); startX=m_startX; startY=m_startY; endX=m_endX; endY=m_end

3、Y; UpdateData(FALSE); flag=true; pview-Invalidate();void Inputdialg:OnMidpoint() / TODO: Add your control notification handler code here UpdateData(TRUE); startX=m_startX; startY=m_startY; endX=m_endX; endY=m_endY; UpdateData(FALSE); flag2=true; pview-Invalidate();void Inputdialg:OnBresenham() / TOD

4、O: 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 here UpdateData(TRUE); MidPointX=m

5、_MidPointX; MidPointY=m_MidPointY; circleR=m_circleR; UpdateData(FALSE); flag4=true; pview-Invalidate();6、要实现图像的显示还是需要通过视图类来实现,在ondraw()函数中添加如下代码: CClientDC dc(this); if(flag=true) DDALine(startX,startY,endX,endY,RGB(0,255,0),dc); flag=false; if(flag2=true) MidBresenhamLine(startX,startY,endX,endY,R

6、GB(255,0,0),dc); flag2=false; if (flag3=true) BresenhamLine(startX,startY,endX,endY,RGB(255,0,255),dc); flag3=false; if (flag4=true) MidBresenhamCircle(MidPointX,MidPointY,circleR,RGB(250,0,100),dc); flag4=false; 7、上一步中的flag,flag2,flag3,flag4都是未定义变量,需要再对其进行定义,这次是对部变量的定义,(1)在StdAx.h 添加: extern int st

7、artX,startY,endX,endY,circleR,MidPointX,MidPointY; extern bool flag,flag2,flag3,flag4;(2)在StdAfx.cpp中添加: int startX,startY,endX,endY,circleR,MidPointX,MidPointY; bool flag,flag2,flag3,flag4;(3)在Inputdialg.cpp中添加: extern CGraphicView *pview; extern int startX,startY,endX,endY,circleR,MidPointX,MidPoi

8、ntY; extern bool flag,flag2,flag3,flag4;8、在GraphicView.cpp中定义CGraphicView *pview=NULL;,要指针生效同样需要初始化, 如下:CGraphicView:CGraphicView() / TODO: add construction code here pview=this;9、至此,准备工作做的是差不多了,但最重要的是还缺少实现函数,在视图类中添加如下函数:void CGraphicView:DDALine(int x0, int y0, int x1, int y1, int color,CClientDC &

9、dc) /sleep判断是否直接画 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); else eps1=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); in

10、t b=(int)(y+0.5); /dc.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)/斜率不存在 for(int i=y0;ix1) x=x1;x1=x0;x0=x; y=y1;y1=y0

11、;y0=y; dx=x1-x0;dy=y1-y0; float 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

12、) x=x0;y=y0; d=-dx-2*dy; UpIncre=-2*dx-2*dy;/下 DownIncre=-2*dy; /上 while(x0) /大于0,取下点 y-; d+=UpIncre; else d+=DownIncre; else if(k=y1) dc.Ellipse(x-1,y-1,x+1,y+1); y-; if(d0) /大于0,取右点 x+; d+=UpIncre; else d+=DownIncre; void CGraphicView:BresenhamLine(int x0, int y0, int x1, int y1, int color,CClient

13、DC &dc) CPen newpen(PS_SOLID,1,color); dc.SelectObject(&newpen); if(x0=x1)/斜率不存在 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=

14、-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.Ellipse(x-1,y-1,x+1,y+1); y-; e+=2*dy; /e+k if(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.SelectObj

15、ect(&newpen); int x,y,d; /x为中点x坐标 x=0; y=r; d=1-r; while(x=y) dc.SetPixel( x+MidPointX, y+MidPointY,color); dc.SetPixel(-x+MidPointX, y+MidPointY,color); dc.SetPixel(-x+MidPointX,-y+MidPointY,color); dc.SetPixel( x+MidPointX,-y+MidPointY,color); dc.SetPixel( y+MidPointX, x+MidPointY,color); dc.SetPixel(-y+MidPointX, x+MidPointY,color); dc.SetPixel(-y+MidPointX,-x+MidPointY,color); dc.SetPixel( y+MidPointX,-x+MidPointY,color); if(d0) d+=2*x+3; else d+=2*(x-y)+5; y-; x+; 10、最后在对应的实现文件中加入适当的头文件申明,保证编译链接的通过。三、运行结果 DDA: MIDPOINT: BRESENHAM: BRESENHAMCIRCLE: MidpointEllipse:五、教师评语签名: 日期: 年 月 日 成绩

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1