计算机图形学实验报告一.docx_第1页
计算机图形学实验报告一.docx_第2页
计算机图形学实验报告一.docx_第3页
计算机图形学实验报告一.docx_第4页
计算机图形学实验报告一.docx_第5页
全文预览已结束

下载本文档

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

文档简介

实验一 直线、圆、椭圆的生成算法一、实验目的与内容目的:利用实验使我对所学的图形生成算法加深印象,并且练习书写规范的实验报告格式。1、了解VC编程环境中常用控件命令和绘图函数,掌握处理图形的基本方法;2、实现直线生成算法:数值微分法、中点画线法、Bresenham画线法;3、实现圆的生成算法:简单画圆法、中点画圆法、Bresenham画圆法;4、实现椭圆生成算法:中点画椭圆法。二、实验前准备:算法分析使用开发环境VC+6.0,建立工程MFC AppWizard exe,选择单文档。进入IDR_MAINFRAME,编辑菜单栏,对需要处理的菜单项标题“建立类向导”,添加消息映射函数,在映射的函数处添加相应算法的程序代码,就可以完成整个程序。算法的学习和理解是图形学学习的重要部分,以下对各种算法进行分析和总结:1、DDA算法生成直线斜率是DDA算法的关键,用两点坐标很容易可以得到斜率k,但这里要注意k是float。如果k的绝对值在0和1之间,每次画点x+,y+k再进行四舍五入(因为x此时比y的变化快)。否则,y+。也就是为了保持每次+k(或1/k)要小于1。不用对k的正负有太多考虑,例如point1(100,100),point2(200,200),可能得到k=-1,这时我们就从point1开始画点,所得的结果是相同的。2、中点画线法判别式是中点画线法的关键,(0=k=0,则d+2*a,上一个点d=1时,做-1)。d=0.5,取右上方的点,=0则取右上方点,e-2dx。(替换规则2dx =1,2dy=k)。4、中点画圆法中点法是利用将中点坐标代入到判别式中,通过判断得到点的位置(仅有两种情况)。圆有很好的对称性,八对称性(其实是n对称性),只要求出右上方的八分之一部分就可以得到整个圆弧上的坐标显然,判别式值小于0,中点在圆内,取正右方的点,d+2x+3;判别式大于等于0,中点在圆外或圆上,取右下方的点,d+2(x-y)+5;d的初值,将(1,R-0.5)代入判别式,=1.25 - R。为了提高效率,我们转化为整数运算,e = d - 0.25 = 1 - R。x+ 直到 xy。5、Bresenham算法生成圆算法在这两种图形的生成中都是最有效率的,要找到最接近于实际点的点。d1和d2分别是y到右上和正右方距离的平方,将d = d1 - d2作为判别的误差。当d=0则,x+,y-,d = d+4(x-y)+10;注意:应该先做d的运算。判别式的初值,d0 = 3-2R。(推导过程在这里不做进一步阐述)6、中点画椭圆法椭圆具有四对称性,因此我们只需要找到右上方的点即可。需要考虑的是,它在这四分之一弧上斜率会经过-1,也就是说,x和y变化速度的谁大谁小在这个过程不是一定的。因此整个椭圆要分为两个部分来考虑。判断方法,b2x+1a2y-0.5 在这个范围内即为上半部分。上半部分)点(x , y),它的下一个中点是(x+1,y+0.5),将它代入到椭圆的方程中可以得到 d=b2(x+1)2+a2(y-0.5)2-a2b21)若d=0,中点在椭圆外,可得为右下方的像素点,d = d+b22x+3+2a2(1-y)3)判别式的初值,d = b2+a2(-b+0.25) 下面我们来考虑下半部分,1)若d=0,中点在椭圆外,可得为正下方的像素点,d = d + 2a2(-2y+3)三、具体算法提炼1、DDA算法生成直线1)通过直线L的两个端点 P0x0,y0 和 P1x1,y1,得到直线L的float型斜率k = y1-y0x1-x0,画出起点 P0 ;2)点 Pixi,yi 的下一个要求的点为 Pi+1xi+1,yi+1 ;若 | k | 1,则 xi+1=xi+1,yi+1=round (yi+k);(注:round 为求四舍五入);否则,yi+1=yi+1,xi+1=round (xi+1/k) ; 3)当y = y1(或x = x1)结束,否则转到2)。2、中点画线法1)通过直线L的两个端点 P0x0,y0 和 P1x1,y1,得到a= y0-y1,b=x1-x0,d=2a+b;2)点 Pixi,yi 的下一个要求的点为 Pi+1xi+1,yi+1;若d0,则d=d+2a,x+,y不变;否则d=d+2a+2b,x+,y+;3)当y = y1(或x = x1)结束,否则转到2)。3、Bresenham算法生成直线1)通过直线L的两个端点 P0x0,y0 和 P1x1,y1,得到dy= y0-y1,dx=x1-x0,e0=-dx;2)点 Pixi,yi 的下一个要求的点为 Pi+1xi+1,yi+1;xi+1=xi+1,ei+1=ei+2dy;当ei0时,yi+1=yi+1,ei+1=ei-2dx,否则yi+1=yi,ei+1=ei;3)当y = y1(或x = x1)结束,否则转到2)。4、中点画圆法1)圆的圆心为P0x0,y0,半径为R,画出第一个像素(0,R),d0=1.25-R;2)点 Pixi,yi 的下一个要求的点为 Pi+1xi+1,yi+1,当d0时,d = d + 2xi + 3,xi+1=xi+1 ;否则,d = d + 2(xi-yi) + 5 ,xi+1=xi+1, yi+1=yi+1;按八分法分别画出(下标均为i+1)(x,y),(y,x),(-x,y),(y,-x),(x,-y),(-y,x),(-x,-y),(-y,-x)3)当x = R时结束,否则转到2)。5、Bresenham算法生成圆1)圆的圆心为P0x0,y0,半径为R,画出第一个像素(0,R),d0=3-2R;2)点 Pixi,yi 的下一个要求的点为 Pi+1xi+1,yi+1 当d0时,d = d + 4xi + 6,xi+1=xi+1 , yi+1=yi; 否则,d = d + 4(xi-yi) + 10 ,xi+1=xi+1, yi+1=yi+1;按八分法分别画出(下标均为i+1)(x,y),(y,x),(-x,y),(y,-x),(x,-y),(-y, x),(-x,-y),(-y,-x)3)当x = R时结束,否则转到2)。( 以上所有算法所实现的直线或圆都

温馨提示

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

评论

0/150

提交评论