- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
大学实验报告
学院:计算机科学与信息 专业:计算机科学与技术班级:计科101喻志华学号1008060024实验组实验时间2013/3/30指导教师吴云
学院:计算机科学与信息 专业:计算机科学与技术
班级:计科101
喻志华
学号
1008060024
实验组
实验时间
2013/3/30
指导教师
吴云
成绩
实验项目名称
圆和椭圆的生成算法
实
验 根据圆的Brensenham算法、中点算法和中点改进算法, 以及椭圆的中点算法, 编写
目 程序,实现圆与椭圆的绘制。
实验要求的
实验要求
圆、椭圆的中点算法
圆的优化后的算法:二次差分法
编制源程序;
对于一些较为重要的算法,可以摘抄在报告中;
1.中点算法
A .构造函数 F(X,Y)=X +Y-R,则可知
F (M 0: M在圆,取T
F ( M 0 : M在圆外,取B
B .第一个M点的值有:
2 2 2
DM = F(M0)= F(1,R-0.5)= 1 +(R-0.5) -R =1.25-R
右 D=d-0.25
则判别式d0等价于D-0.25。即DM=1-R与DM=1.25-R等价。
实 验 原 理
如果dM0,表示下一中点 M在圆,选择T点,且:
dMT= F(MT)= F(xp+2,yp-0.5) 贝U:
?dMT= dMT - dM=2xp+3
如果dM0,表示下一中点 M在圆外,选择B点,且:
dMB= F(xMB,yMB)= F(xp+2,yp-1.5) 贝U:
?dMB= dMB - dM=2xp-2yp +5
2?中点改进算法一一增量算法
设圆上某点l(xi,yi);则下一点为J点,坐标为(xi+1 , yj ) dT=2xp+3;
dB=2(xp-yp)+5;
d1=d2=0;
因为x每次加1,所以dj点
将增量?dMT-2(xi+1)+3-dT+2-dT+d1; (d1=d1+2)
将增量?dMB-2(xi+1)-2yj+5-dB+d1+d2;
dj较之于di , x部分增量增加相冋的量, y部分两种情况
取T点,yj不减1, y部分增量的增量无变化
取B点,yj减1, y部分增量的增量加 2.
所以当y —时,d2-d2+2
因此,d0, d-d+dT+d1;
d0, d-d+dB+d1+d2;
Brensenham 算法
1.基本思想:
当|D(Ti)| |D(Bi)| ,则Bi更接近于圆周,选择 Bi ;
当|D(Ti)| v|D(Bi)| ,则Ti更接近于圆周,选择 Ti ;
若令 D-|D(Ti)|-|D(Bi)|
贝U D 0,取 Bi ; D v 0,取 Ti ;
2.三种情况
设 x0-0 , y0-R;则 T1 为(1,R) , B1 为(1,R-1),
d1- (12+R2-R2)+[(12+(R-1)2-R2]-3-2R
若 di v 0,则取 Ti 作为下一点,即 Pi(xi-1+1,yi-1) ;
d(i+1)-di+4xi-1+6
若 di 0,则取 Bi 作为下一点,即 Pi(xi-1+1,yi-1-1) ,
d(i+1)-di+4(xi-1-yi-1)+10
椭圆的中点算法
与圆同理,对于某中点 M
2 2 2 2 2 2
dM=F(M)=b(x+1) +a(y-0.5) -a b (1)若d=0,则M在椭圆弧上,取 T/B点
⑵若d0,则M在椭圆弧,应取T点
⑶若d0,则M在椭圆弧外,应取 B点
A?上半部分雷同圆的推导,得到结论:
d10, d1=d1+b*b*(2*x+3);
d1=0, d1= d1+(b*b*(2*x+3)+a*a*(-2*y+2))
每次判断是否转入下部分: b*b*(x+1) a*a*(y-0.5) 说明还在上部分
B.下部分,y变化较快,每次减1,根据d值决定选L或者R点,知道y=0.
分L和R两种情况推导,得到结论:
d2 0,d2 =d2+b*b*(2*x+2)+a*a*(-2*y+3)
d1=0, d2=d2+a*a*(-2*y+3)
Visual C++ 6.0/ Win dows XP
实 验 步 骤
1.新建工程MFC
2.插入两个对话框,绘制圆的命名为InputDIg,绘制椭圆的命名为
InputDIg,且
设置其各控件ID,变量名如下:
WFC Wizard
Uc-Qi-tt^r M?l^ Vari*birt 加jwtbimI
Uc-Qi-tt^r M?l^ Vari*birt 加jwtbimI | AclMcKEwnts | Cl?^? IfWn |
iPrnjctt Ctfefi* ^niiic;
[HR^wOrrlrl IA
T 1 ”
F F:UAInrvOl*甲p
■CflTir?| 环:
IDC F[MT1
dcMjhk hi
原创力文档


文档评论(0)