椭圆中点Bresenham算法.doc

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
椭圆中点Bresenham算法

目录 一、设计题目……………………………………………………………2 二、设计要求……………………………………………………………2 三、设计方案……………………………………………………………2 四、程序流程图…………………………………………………………6 五、程序清单…………………………………………………………7 六、程序运行结果分析………………………………………………15 七、系统不足及改进方案……………………………………………15 八、设计总结…………………………………………………………16 一、设计题目:椭圆中点Bresenham算法 二、设计要求: 1、要求有两种输入方式: (1)输入椭圆的长短轴来生成椭圆; (2)根据输入点来生成椭圆并输出椭圆的长短轴; 2、椭圆的颜色为红色; 三、设计方案: 1、椭圆对称性质:椭圆分别关于X轴、Y轴对称。因此在计算椭圆生成的时候,只需要计算1/4个椭圆,经过对称原理就可以实现其他3/4个椭圆的生成了,即:计算出目标点(x,y)的坐标,必然存在(x,-y)、(-x,y)(-x,-y)。此方案中采用计算第一象限中椭圆的生成,即:计算x=0到y=0的1/4的椭圆。先通过平移的方法将假设心在坐标原点,然后计算,最后再平移到真实心位置。 令F(x,y)=b*b*x*x+a*a*y*y- a*a* b*b=0 (1)对于第一区域,如图1所示,P点坐标为(,)、P1(+1, )为P点正右边的点、P2(+1, -1)为P点右下方的点,M(+1,-0.5)为P1、P2的中点。 令d=F(M)=F(+1,-0.5)=b*b+a*a*(b-0.5)*(b-0.5)-a*a*b*b 当=0、=bd=0时,应取P2作为下一个像素点,则其正右方的点的坐标为(+2,-1),右下方的点的坐标为(+2,-2),中点坐标为(+2,-1.5)。 此时,d=F(M)=F(+2,-1.5)=d+b*b*(2*+3)-2a*a*(-1) d0时,应取P1作为下一个像素点,则其正右方的点的坐标为(+2,),右下方的点的坐标为(+2,-1),中点坐标为(+2,-0.5)。 此时,d=F(M)=F(+2,-0.5)=d+2* b*b* +3* b*b (2)对于第二区域,如图2所示,P点坐标为(,),P1(, -1)为P点正下方的点、P2(+1, -1)为P点右下方的点,M(+0.5,-1)为P1、P2的中点。 令d=F(M)=F(+0.5,-1)=b*b*(+0.5)*(+0.5)+a*a*(-1)*(-1)-a*a*b*b 设P坐标的初始值为= ,=,= d的初始值为: d= F(+0.5, -1)= b*b*(+0.5)*(+0.5)+a*a*(-1)*(-1)-a*a*b*b d=0时,应取P1作为下一个像素点,则其正下方的点的坐标为(,-2),右下方的点的坐标为(+1,-2),中点坐标为(+0.5,-2)。 此时,d=F(M)=F(+0.5,-2)=d+ a*a*(3-2 *) d0时,应取P2作为下一个像素点,则其正下方的点的坐标为(+1,-2),右下方的点的坐标为(+2,-2),中点坐标为(+1.5,-2)。 此时,d=F(M)=F(+1.5,-2)=d+2*b*b*(+1)+ a*a*(3-2*) (3)根据对称性原理计算其他3个象限的坐标。,)、(,) 设椭圆的方程为: 将两点坐标(,)、(,)代人椭圆方程中,得出a、b的值分别为: =(*-*)/(-) =(*-*)/(-) 然后按照方式一生成所求椭圆。 四、程序流程图 输入方式一的流程图如图3所示: 输入方式二的流程图如图4所示: 五、程序清单 // zhongdiansuanfa.cpp : Defines the entry point for the console application. #include stdafx.h #include stdlib.h #include vector #include GL/glut.h #include math.h int a; int b; /*定义长短半轴分别为a、b*/ void GetValue() { int input=0; int x1,x2,y1,y2; printf(请输入中点算法产生的方式:\n); printf(1.输入椭圆长短半径\n); printf(2.输入椭圆坐标\n); /*输出两种输入方式*/ scanf(%d,input); if(input==1) { printf(请输入a的值:\n); scanf(%d,a); printf(请输入b的值:\n); scanf(%d,b); } if(input==2)

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档