欢迎来到天天文库
浏览记录
ID:58648665
大小:127.87 KB
页数:5页
时间:2020-10-16
《计算机图形学-实验二-椭圆的扫描转换算法.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、西北农林科技大学实习报告学院名称:理学院专业班级:姓名:学号:课程:计算机图形学实验报告日期:第十三周实验二椭圆的扫描转换算法一、实验目的了解和掌握中点算法和Bresenham算法。1)中点Bresenhan画椭圆算法。2)编写源程序,在计算机上编译运行,画出正确的图形和输出交点坐标。二、实验步骤1)对直线、圆弧的几何形状及相对位置进行分析,选定比较合适的算法模型。2)画出程序流程图;3)编写程序的源程序;4)编辑源程序并进行调试;5)进行特殊模式的运行测试,并结合情况进行调整。三、实验内容了解和掌握中点算法和Bresenham算法。原理设长短半轴分别为a、b,计算的初始位置为(0,b)。椭圆
2、的方程为:。令(1)推导圆弧的上半部分(即第一区域)绘制公式:对于第一区域,如图1所示,点坐标为(),()为点正右边的点,()为点右下方的点,()为、的中点。令当,时,的初始值为:当时,应取P2作为下一个像素点,则其正右方的点的坐标为(,),右下方的点的坐标为(,),中点坐标为(,)。此时,当时,应取P1作为下一个像素点,则其正右方的点的坐标为(,),右下方的点的坐标为(,),中点坐标为(,)。此时,(2)推导圆弧的下半部分(即第二区域)绘制公式:对于第二区域,如图2所示,P点坐标为(,),P1(,)为P点正下方的点、P2(,)为P点右下方的点,M(,)为P1、P2的中点。令设P坐标的初始值为
3、=,=,=的初始值为:当时,应取P1作为下一个像素点,则其正下方的点的坐标为(,),右下方的点的坐标为(,),中点坐标为(,)。此时,当时,应取P2作为下一个像素点,则其正下方的点的坐标为(,),右下方的点的坐标为(,),中点坐标为(,)。此时,流程图为:输入半长轴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)4、+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)结束程序的源程序:m文件functionmidbresenhamellipse(a,b)x=0;y=b;d1=b*b+a*a*(-b+0.25);whileb*b*(x+1)5、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实验结6、果>>midbresenhamellipse(8,6)>>midbresenhamellipse(200,100)四、实验总结这次实验做了中点bresenhame算法画椭圆。对中点bresenhame算法有了进一步的了解。通过MATLAB实现算法,实践和理论结合,更进一步的提高了对算法的掌握。
4、+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)结束程序的源程序:m文件functionmidbresenhamellipse(a,b)x=0;y=b;d1=b*b+a*a*(-b+0.25);whileb*b*(x+1)5、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实验结6、果>>midbresenhamellipse(8,6)>>midbresenhamellipse(200,100)四、实验总结这次实验做了中点bresenhame算法画椭圆。对中点bresenhame算法有了进一步的了解。通过MATLAB实现算法,实践和理论结合,更进一步的提高了对算法的掌握。
5、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实验结
6、果>>midbresenhamellipse(8,6)>>midbresenhamellipse(200,100)四、实验总结这次实验做了中点bresenhame算法画椭圆。对中点bresenhame算法有了进一步的了解。通过MATLAB实现算法,实践和理论结合,更进一步的提高了对算法的掌握。
此文档下载收益归作者所有