计算机图形学实验报告实验2_第1页
计算机图形学实验报告实验2_第2页
计算机图形学实验报告实验2_第3页
计算机图形学实验报告实验2_第4页
计算机图形学实验报告实验2_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、贵州大学实验报告学院:计算机科学与信息 专业:计科 班级:101姓名吕杨学号1008060040同组成员实验时间2013-4-7指导教师吴云成绩实验项目名称圆的生成算法实验目的1、通过实验,进一步理解和掌握中点算法、Bresenham算法和二阶差分算法;2、掌握以上算法生成圆的基本过程;3、通过编程,学习 VC及Matlab环境下完成用中点算法、Bresenham算法和二阶差分算法实现圆的绘制。实验内容1、用中点算法、Bresenham算法和二阶差分算法实现圆的绘制。2、写出实验报告实验环境WIN XP、VC+ 6.0及Matlab语言程序设计环境实验环境操作系统:Windows XP SP3

2、编程环境:Microsoft Visual C+ 6.0计算机配置:P4 3.0,1G DDR2 160G硬盘 X1300PRO图形卡实验主要代码及运行结果步骤l 圆的生成算法一 Bresenham 算法1. 原理:利用圆的对称性,只须画出1/8圆, 就可画出整个圆。P为当前点亮象素,那么,下一个点亮的象素可能是P1(Xp+1,Yp)或P2(Xp +1,Yp +1)。d的初值:d0= F(1, R-0.5)=1.25 R。若d=0, 则P2 为下一个象素,那么再下一个象素的判别式为:d1 = F(xp + 2, yp - 1.5)= d + (2xp + 3)+(-2 yp + 2)即d 的增

3、量为 2 (xp - yp) +5.2.运行时主要代码:void CTestView:Mbline()/Bresenham函数CClientDC dc(this);COLORREF rgb=RGB(0,0,255);/定义直线颜色为蓝色double x,y,d,k;x=x0;y=y0;k=(y1-y0)/(x1-x0);d=0.5-k; for(x=x0;x=x1;x+) dc.SetPixel(ROUND(x),ROUND(y),rgb); if(d0)y+; d+=1-k;else d-=k; 2. 结果: 二中点画圆算法1.原理:构造函数:F(X,Y)=X2 + Y2 - R2,则 F(

4、X,Y)= 0:(X,Y)在圆周上; F(X,Y) 0:(X,Y)在圆外。 假设P是当前已确定的光栅点。构造判别式:dM= F(M)= F(xp+1,yp-0.5)=(xp+1)2+( yp-05)2-R2(1)如果dM0,表示下一中点M在圆外,选择B点,且: dMB= F(xMB,yMB)= F(xp+2,yp-1.5)=(xp+2)2+( yp-1.5)2-R2 dMB= dMB - dM=2xp-2yp +5 (3)dM0=1.25-R ; 如果dM0,选择B点,且: dM = dM + 2xp-2yp +5 3. 主要代码:/假设圆的中心在原点 void MidPointCircle

5、(int radius,int value)int x=0; int y= radius; int d=1 - radius;CirclePoints(x, y, value); While (yx) if (dx) if (dSetWindowText(Bressenham算法); RedrawWindow();GetMaxX();GetMaxY();Mbcircle();void CCircleView:OnMENUMid() / TODO: Add your command handler code hereCircleDlg dlg;if(dlg.DoModal()=IDOK) R=d

6、lg.m_R; AfxGetMainWnd()-SetWindowText(中点算法); RedrawWindow();GetMaxX();GetMaxY();MidPoint();void CCircleView:OnMENUEr() / TODO: Add your command handler code here CircleDlg dlg;if(dlg.DoModal()=IDOK) R=dlg.m_R; AfxGetMainWnd()-SetWindowText(二阶差分算法); RedrawWindow();GetMaxX();GetMaxY();Erjie();3.运行结果:l

7、 椭圆的生成算法void CMyView:Mbellipse()/椭圆的Bresenham算法double x,y,d1,d2;x=0;y=b;d1=b*b+a*a*(-b+0.25);EllipsePoint(x,y);while(b*b*(x+1)a*a*(y-0.5)/椭圆AC弧段if (d10)if (d20)d2+=b*b*(2*x+2)+a*a*(-2*y+3);x+;elsed2+=a*a*(-2*y+3);y-;EllipsePoint(x,y);void CMyView:EllipsePoint(double x, double y)/四分法画椭圆 CClientDC dc(this);COLORREF rgb=RGB(0,0,255);/定义椭圆的颜色dc.SetPixel(ROUND(x)+MaxX/2,ROUND(y)+MaxY/2,rgb);dc.SetPixel(ROUND(-x)+MaxX/2,ROUND(y)+MaxY/2,rgb);dc.SetPixel(ROUND(x)+MaxX/2,ROUND(-y)+MaxY/2,rgb);dc.SetPixel(ROUND(-x)+MaxX/2,ROUND(-y)+MaxY/2,rgb); 运行结果如下:实验总结 通过这次实验,利用vc+6

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论