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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

Bresenham算法画圆并填充实验报告09009202陶园.docx

1、Bresenham算法画圆并填充实验报告09009202陶园Bresenham算法画圆并填充实验报告 09009202 陶园计算机图形学实验报告Bresenham算法画圆并填充 09009202 陶园 计算机图形学实验报告 实验二 Bresenham算法画圆并填充 学号: 09009202 姓名:陶园 成绩: 东南大学计算机科学与工程学院 二一一年十一月 计算机图形学实验报告Bresenham算法画圆并填充 09009202 陶园 一( 实验题目 Bresenham算法画圆并填充 二( 算法思想 1. 首先,真实的线条是连续的,但是计算机中的线条是离散的,是由很多点组成的,那么画线的重点就是如

2、何高效地找到这些离散的点来更好地画出想要的图形。 2. 实验要求用Bresenham算法实现画圆。那么首先先要了解Bresenham算法是一种什么算法。经过查阅,我找到Bresenham直线算法和画圆算法。直线是圆的基础。 Bresenham直线算法是用来描绘由两点所决定的直线的算法,它会算出一条线段在 n 维光栅上最接近的点。这个算法只会用到较为快速的整数加法、减法和位元移位,常用于绘制电脑画面中的直线。是计算机图形学中最先发展出来的算法。 Bresenham画圆算法又称中点画圆算法,与Bresenham 直线算法一样,其基本的方法是利用判别变量来判断选择最近的像素点,判别变量的数值仅仅用一

3、些加、减和移位运算就可以计算出来。为了简便起见,考虑一个圆 心在坐标原点的圆,而且只计算八分圆周上的点,其余圆周上的点利用对称性就可得到。 计算机图形学实验报告Bresenham算法画圆并填充 09009202 陶园 Bresenham直线算法流程图 圆的八对称性 计算机图形学实验报告Bresenham算法画圆并填充 09009202 陶园 所以,只需要知道圆上的一个点的坐标 (x, y) ,利用八对称性,就能得到另外七个对称点的坐标。和直线算法类似,Bresenham画圆算法也是用一系列离散的点来近似描述一个圆。 Bresenham画圆算法的流程图 计算机图形学实验报告Bresenham算法

4、画圆并填充 09009202 陶园 三( 源代码 #include stdlib.h #include math.h #include /按坐标画点 void draw(GLint xCoord, GLint yCoord) glBegin(GL_POINTS);/以点的形式 glVertex2i(xCoord, yCoord);/在,xCoord, yCoord,坐标下画点 glEnd(); glFlush();/强制刷新 void Circle(GLint x,GLint y) int a=abs(x);/将x的绝对值赋给a int b=abs(y);/将y的绝对值赋给b int c=a*

5、-1;/使c=a的相反数 int d=b*-1;/使d=b的相反数 draw(x, y); draw(y, x); draw(-x, y); draw(y, -x); draw(x, -y); draw(-y, x); draw (-x, -y); draw(-y, -x);/按照圆的对称性以圆心为对称点将四个象限的圆周画出 for(int i=c;i=a;i+) for(int j=d;j=0) Circle(x,y); if(d 0) d1 = 2* (d+ y) -1; if(d1 0) d2 = 2*(d-x)-1; if(d2 = 0) direct = 2; else direct

6、 = 3; else direct = 2; switch(direct) case 1: x+; d+=2*x + 1; break; case 2: x+; y-; d+=2*(x-y+1) + 1; break; case 3: y-; d+=-2*y + 1; break; void RenderScene(void) 计算机图形学实验报告Bresenham算法画圆并填充 09009202 陶园 BresenhamCircle(50);/主函数调用 /当窗口大小改变时由GLUT函数调用 void ChangeSize(GLsizei width, GLsizei Height) GLf

7、loat aspectRatio; if (Height = 0) Height = 1; glViewport(0, 0, width, Height);/指定视口矩形左下角 glMatrixMode(GL_PROJECTION);/指定当前矩阵,对投影矩阵应用随后的矩阵操glLoadIdentity();/ 装载单位矩阵 aspectRatio = (GLfloat)width / (GLfloat) Height; if (width = Height) glOrtho(-100.0, 100.0, -100.0 / aspectRatio, 100.0 / aspectRatio, 1

8、.0, -1.0); else glOrtho(-100.0 * aspectRatio, 100.0 * aspectRatio, -100.0, 100.0, 1.0, -1.0); glMatrixMode(GL_MODELVIEW);/指定当前矩阵,对模型视景矩阵堆栈应用随后的矩阵操作glLoadIdentity();/ 装载单位矩阵 /主程序入口 void main(void) glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);/设置初始显示模式,指定单缓存窗口,指定 RGB 颜色模式的窗口 glutCreateWindow(圆);/创建窗口,窗

9、口名称为“圆” glutDisplayFunc(RenderScene);/进行画图 glutReshapeFunc(ChangeSize);/重画回调函数 glutMainLoop();/进入GLUT事件处理循环,让所有的与“事件”有关的函数调用无限循环 计算机图形学实验报告Bresenham算法画圆并填充 09009202 陶园 四(结果截屏 五(出现问题及解决方案 1.对于如何填充整个圆一开始没有好的方法,后来决定每画一个点,就将该横坐标的所有纵坐标点画出,从下到上,整个填充圆从中间到两边形成。 2,一开始画圆时出现的都是白色,没有圆,后来发现是因为没有在glEnd()之后加glFlush()这个函数。加上之后就可以显示出圆了。 3.对于如何将这个圆显示出来,还参考了其他画图用的函数,但是每项功能都标注出来了。

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

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