西北农林科技大学实习报告学院名称:理学院专业班级:姓名:学号:课程:计算机图形学实验报告日期:第十三周实验二椭圆的扫描转换算法一、实验目的了解和掌握中点算法和Bresenham算法。1)中点Bresenhan画椭圆算法。2)编写源程序,在计算机上编译运行,画出正确的图形和输出交点坐标。二、实验步骤1)对直线、圆弧的几何形状及相对位置进行分析,选定比较合适的算法模型。2)画出程序流程图;3)编写程序的源程序;4)编辑源程序并进行调试;5)进行特殊模式的运行测试,并结合情况进行调整。三、实验内容了解和掌握中点算法和Bresenham算法。原理设长短半轴分别为a、b,计算的初始位置为(0,b)。椭圆的方程为:12222byax。令0),(222222bayaxbyxF(1)推导圆弧的上半部分(即第一区域)绘制公式:对于第一区域,如图1所示,P点坐标为(ppyx,),1P(ppyx,1)为P点正右边的点,2P(1,1ppyx)为P点右下方的点,M(5.0,1ppyx)为1P、2P的中点。令22222)5.0()5.0,1()(bababyxFMFdpp当0Px,byP时,d的初始值为:22241ababd当0d时,应取P2作为下一个像素点,则其正右方的点的坐标为(2Px,1Py),右下方的点的坐标为(2Px,2Py),中点坐标为(2Px,5.1Py)。此时,)1(2)32()5.1,2()(22ppppyaxbdyxFMFd当0d时,应取P1作为下一个像素点,则其正右方的点的坐标为(2Px,Py),右下方的点的坐标为(2Px,1Py),中点坐标为(2Px,5.0Py)。此时,2232)5.0,2()(bxbdyxFMFdpPp(2)推导圆弧的下半部分(即第二区域)绘制公式:对于第二区域,如图2所示,P点坐标为(Px,Py),P1(Px,1Py)为P点正下方的点、P2(1Px,1Py)为P点右下方的点,M(5.0Px,1Py)为P1、P2的中点。令222222)1()5.0()1,5.0()(bayaxbyxFMFdpppp设P坐标的初始值为Px=0x,Py=0y,0x=0yd的初始值为:2220220200)1()5.0()1,5.0(bayaxbyxFd当0d时,应取P1作为下一个像素点,则其正下方的点的坐标为(Px,2Py),右下方的点的坐标为(1Px,2Py),中点坐标为(5.0Px,2Py)。此时,)23()2,5.0()(2pppyadyxFMFd当0d时,应取P2作为下一个像素点,则其正下方的点的坐标为(1Px,2Py),右下方的点的坐标为(2Px,2Py),中点坐标为(5.1Px,2Py)。此时,)23()1(2)2,5.1()(22ppppyaxbdyxFMFd流程图为:程序的源程序:m文件functionmidbresenhamellipse(a,b)x=0;y=b;d1=b*b+a*a*(-b+0.25);whileb*b*(x+1)a*a*(y-0.5)plot(x,y,'*');holdonplot(-x,-y,'*');plot(-x,y,'*');plot(x,-y,'*');输入半长轴a,短半轴b计算初始值d=b2+a2(−b+0.25),x=0,y=b绘制(x,y)以及另外三个点判断d的符号。d=0.dd+b^2(2x+3),(x,y)(x+1,y);否则dd+b^2(2x+3)+a^2(2-2y)当b^2(x+1)a^2(y-0.5)时用上半部分计算最后点(x,y),来计算下半部分中d的初值d=b^2(x+0.5)^2+a^2(y-1)^2-a^2b^2绘制点(x,y)及其四分象限上的另外3个对称点判断d的符号。d=0,dd+b^2(2xi+2)+a^2(3-2yi),(x,y)(x+1,y+1)否则dd+a^2(3-2yi),同时(x,y)(x,y-1)结束ifd1=0d1=d1+b*b*(2*x+3);x=x+1;y=y;elsed1=d1+(b*b*(2*x+3)+a*a*(-2*y+2));x=x+1;y=y-1;endendd2=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)*(y-1)-a*a*b*b;whiley=0plot(x,y,'*');holdonplot(-x,-y,'*');plot(-x,y,'*');plot(x,-y,'*');ifd2=0d2=d2+b*b*(2*x+2)+a*a*(-2*y+3);x=x+1;y=y-1;elsed2=d2+a*a*(-2*y+3);y=y-1;endgridonend实验结果midbresenhamellipse(8,6)midbresenhamellipse(200,100)四、实验总结这次实验做了中点bresenhame算法画椭圆。对中点bresenhame算法有了进一步的了解。通过MATLAB实现算法,实践和理论结合,更进一步的提高了对算法的掌握。