图形学实验报告-Bresenham算法画圆.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
图形学实验报告-Bresenham算法画圆

计算机图形学 实验报告 姓名: 张晓波 学号: 2010 年 10月 实验1 实用OpenGL 绘制二维图形 实验目的 进一步了解OpenGL程序的框架。 掌握利用OpenGL绘制简单视图的方法。 利用OpenGL中的Bresenham算法直接利用像素点绘制图形。 实验要求 明确实验目的,按实验内容及基本步骤完成实验。 在实验过程中,结合思考与探究中的问题,通过实验进行理解。 理解并掌握本实验的内容。 实验内容及基本步骤 绘制圆形 分析:利用Bresenham算法,可以在自定了第一个点之后算出下一个点的位置,由于要保证斜率小于1,而且只在一个象限内绘制,所以找出的只是1/8圆弧,因此在找点的时候,利用对称性,同时找到8个点,进行绘制。 void Circle(int r) { int x=0,y=r; //初始点 int d=0; //声明决策变量 d=3-2*r; while(x=y) { CircleVertex(x,y);//画圆上点 FillCircle(x,y); //选取对应点,用矩形填充 if(d0) d=d+4*x+6; else { d=d+4*(x-y)+10; y --; } x++; } } void CircleVertex(int x, int y) { glBegin(GL_POINTS); glVertex2f( x, y);//右上角 glVertex2f(- x, y);//左上角 glVertex2f( x,- y);//右下角 glVertex2f(- x,- y);//左下角 //上下侧四个点 glVertex2f( y, x);//右上角 glVertex2f(- y, x);//左上角 glVertex2f( y,- x);//右下角 glVertex2f(- y,- x);//左下角 //左右侧四个点 glEnd(); } 试验结果如下: 2.填充圆形 分析:在一次寻找确定出8个点之后,可以将其上下两端的点作为一组,左右两端的点作为一组分别绘制实心四边形。 void FillCircle(int x,int y) { glBegin(GL_QUADS); //利用上下侧点绘制一矩形 glVertex2f(x,y); glVertex2f(-x,y); glVertex2f(-x,-y); glVertex2f(x,-y); glEnd(); glBegin(GL_QUADS); //利用左右侧点绘制一矩形 glVertex2f(y,x); glVertex2f(-y,x); glVertex2f(-y,-x); glVertex2f(y,-x); glEnd(); } 只绘制x=40的情况如下 全部填充的最终结果如下: 实验小结: Bresenham确实是一种很快速的的算法。但是从实验效果来看的话,画出来的圆形效果很粗糙,这就说明他这样做近似处理虽然在数学上易于处理。但是图像的显示还需要考虑人的视觉,如果用他的算法画一条斜率很小的直线,那么在直线前段时都取的偏下的点,直线后断都取的偏上的点,那么显示出来的就是两条线段了。

文档评论(0)

qwd513620855 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档