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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(贵州大学--实验二:圆和椭圆的生成算法.doc)为本站会员(myw993772)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

贵州大学--实验二:圆和椭圆的生成算法.doc

1、贵州大学实验报告学院:计算机科学与信息学院 专业:软件工程 班级:102姓名 学号 实验组实验时间 指导教师 成绩实验项目名称 实验二:圆和椭圆的生成算法实验目的掌握圆和椭圆的中点算法及二次差分法,了解并掌握在光栅显示系统中圆和椭圆的生成和显示算法,并在自己熟悉的平台上实现相应的测试代码。实验要求1, 掌握圆的基本特性(八对称性)2, 掌握椭圆的基本特性(四对称性)3, 掌握中点算法和二次差分法的思想4, 熟练的编写出测试代码实验原理一、中点算法画圆和椭圆的实验原理(一) 画圆因为圆具有八对称性,可以先画出第二个八分圆,利用八对称性画出其它八分圆。已知圆弧的隐函数的形式为:F(x,y)=x 2

2、+y2-R2=0。所以可知:F(x,y)0,(x,y)在园外;F(x,y)0F(x,y)0,则 M 在园外,下一点取右下方 B 点;如 F(M)=0,则 M 在园上,下一点取 T 点或 B 点均可。构造判别式:d=F(M)=F(x i+1,yi-0.5)=(xi+1)2+(yi-0.5)2-R2(1)d=0,中点在圆外,选右下方的 B 点,再下一个象素的判别式为:dnew=F(xi+2,yi-1.5) =(xi+2)2+(yi-1.5)2-R2=d+(2xi+3)+(- yi+2)=d+2(xi-yi)+5则 d 的增量为:B = 2(x i-yi)+5d 初始值为:d0=F(1,R-0.5)

3、 =1+(R-0.5) 2-R2 =1.25-R因为在 d 的运算中包含了浮点数的运算,使复杂度提高,为了消除 d 中的浮点数运算,可以令 d = 1-r. (二) 画椭圆为方便说明,可以选取中心在原点的椭圆,方程为:x 2/a2+y2/b2 = 1。则隐函数的形式为:F(x,y)= b2 x2+ a2y2-(ab)2=0.因为椭圆具有四对称性,可只考虑第一象限的椭圆,其他的椭圆弧可以通过对称求得。椭圆上的法向量可以将椭圆弧分为上下两个部分,在上半部分,x 的增量大于 y 的增量,在下半部分,y 的增量大于 x 的增量。可以得到这样的一个不等式来判别椭圆弧是否已从上半部分过度到下半部分:b 2

4、 (Xp+1) 0:(X,Y) 在椭圆外(1)对于椭圆弧的上半部分:假设 Pi(xi,y i)已确定,则下一对待选像素的中点是: M(xi+1,yi-0.5)d = F(M) = F(xi+1,yi-0.5)=b2(xi+1)2+a2(yi-0.5)2-a2b2初始点为(0,b),则 M 为(1,b-0.5),d 的初值为:d 0=F(1,b-0.5)=b2+a2/(-b+1/4)(a)当 d=0(取 B 点)时,下一点 (i+1)点的坐标为(x i+1,Y i-1),为确定 i+2 点取的下一个中点 M 的坐标为:(x i+2,Y i -1.5) .则 d2=F(xi+2,yi-1.5),故

5、增量为:b 2(2xi+3)+a2(-2yi+2).(2)对于椭圆弧的下半部分在每一次迭代中都要判断椭圆是否已从上半部进入了下半部,如果 b2x=a2y,则椭圆进入下半部份,此时令y=1,且:d 0=b2(x+0.5)2+a2(y-1)2-a2b2(a)若 d=0,M 在椭圆的外部,取正下方像素 L,则 d=F(xp+0.5,yp-2),增量为:a 2(-2yi+1+1)下半部分的终止条件为 y=0二、二次差分法画圆和椭圆的实验原理(一)画圆二次差分法的基本思想就是在现选像素点的基础上进行二次选择,计算增量,从而达到消除中点算法中的乘法运算,降低增量阶数的目的。假设现有点为 P(xp,yp),

6、在中心法画圆中已求得正右方的增量为 T = 2xi+3,右下方的增量为 B = 2(x i-yi)+5若现已选择 P(xp,yp)点正右方的 T 点,下一个点可以选 T 点正右方的点和 T 点右下方的点。如果选择 T 点正右方的点,增量为:TE = 2(x p+1)+3-(2xp+3) = 2;如果选择 T 点右下方的点,增量为:TSE = 2(x p+1-yp)+5-2(xp-yp)+5 = 2若现已选择 P(xp,yp)点右下方的 B 点,下一个点可以选择 B 点正右方的点和 B 点右下方的点。如果选择 B 点正右方的点,增量为:BE = 2(x p+1)+3-(2xp+3) = 2;如果

7、选择 B 点右下方的点,增量为: BSE= 2(x p+1)-(yp-1)+5-2(xp-yp)+5 = 4;通过以上的分析可以得知,二次差分法画圆比中心法画圆简单,因为它消除了中心法画圆中的乘法运算,降低了增量的阶数,从而降低了算法的复杂度。(三) 画椭圆二次差分法画椭圆的原理类似于画圆,区别在于要考虑椭圆弧的上下两个部分。对于椭圆弧的上半部分:假设现有点为 P(xp,yp),在中心法画椭圆中已求得正右方的增量为 T = b2(2xi+3),右下方的增量为 B = b 2(2xi+3)+a2(-2yi+2)。若现已选择 P(xp,yp)点正右方的 T 点,下一个点可以选 T 点正右方的点和

8、T 点右下方的点。如果选择 T 点正右方的点,增量为:TE = b 22(xi+1)+3-b2(2xi+3) = 2b2如果选择 T 点右下方的点,增量为:TSE = b 22(xi+1)+3+a2(-2yi+2)- b2(2xi+3)+a2(-2yi+2) = 2b2若现已选择 P(xp,yp)点右下方的 B 点,下一个点可以选择 B 点正右方的点和 B 点右下方的点。如果选择 B 点正右方的点,增量为:BE = = b 22(xi+1)+3-b2(2xi+3) = 2b2如果选择 B 点右下方的点,增量为:BSE= b 22(xi+1)+3+a2-2(yi-1)+2- b2(2xi+3)+

9、a2(-2yi+2) = 2b2+2a2.对于椭圆弧的下半部分:假设现有点为 P(xi,yi),在中心法画椭圆中已求得正下方的增量为 L = a2(-2yi+3),右下方的增量为 R = b 2(2xi+2)+a2(-2yi+3)。若现已选择 P(xi,yi)点正下方的 L 点,下一个点可以选 L 点正下方的点和 L 点右下方的点。如果选择 L 点正下方的点,增量为:LS= a 2-2(yi-1)+3- a2(-2yi+3) = 2a2如果选择 L 点右下方的点,增量为:LSE= b 2(2xi+2)+ a2-2(yi-1)+3- b2(2xi+2)+a2(-2yi+3) = 2a2若现已选择

10、 P(xi,yi)点右下方的 R 点,下一个点可以选择 R 点正下方的点和 R 点右下方的点。如果选择 R 点正下方的点,增量为:RS = a 2-2(yi-1)+3- a2(-2yi+3) = 2a2如果选择 R 点右下方的点,增量为:RSE = b 22(xi+1)+2+ a2-2(yi-1)+3- b2(2xi+2)+a2(-2yi+3) = 2b2+2a2实验环境硬件平台:PC 机软 件:Windows 平台,eclipse编程语言:java实验步骤1. 掌握中点算法和二次差分法画圆和椭圆的基本原理;2. 依据算法,在 eclipse 下编写源程序并进行调试;3. 对运行过程中的错误进

11、行修改;4. 对运行结果进行分析与总结;5.书写实验报告。实验内容中心算法画圆的核心代码如下:public void midPointDrawCircle(int r, Graphics g) int x, y;float d;x = 0;y = r;d = 1 - r;g.drawLine(x + MOVE, y + MOVE, x + MOVE, y + MOVE);g.drawLine(x + MOVE, -y + MOVE, x + MOVE, -y + MOVE);while (x 0) / 判断椭圆的下半部分是否已经画完if (d2 0) / 判断椭圆的下半部分是否已经画完if (

12、d2 0) / M在椭圆内部,取右下方的点d2 += se2 ;se2 += 2*a*a+2*b*b;s += 2*a*a;x+;y-; else / M在椭圆的外部,取正下方的点d2 +=s;se2 += 2*a*a;s += 2*a*a;y-;/ 画对称位置上的椭圆g.drawLine(x + MOVE, y + MOVE, x + MOVE, y + MOVE);g.drawLine(-x + MOVE, y + MOVE, -x + MOVE, y + MOVE);g.drawLine(x + MOVE, -y + MOVE, x + MOVE, -y + MOVE);g.drawLi

13、ne(-x + MOVE, -y + MOVE, -x + MOVE, -y + MOVE);实验结果实验截图显示如下:实验总结在画圆和椭圆的算法中,我掌握了很多,学会了中心法画圆和椭圆,二次差分法画圆和椭圆的基本原理,并通过编写测试代码实现了算法,虽然在写测试代码的过程中也遇到了很多问题,但是通过查资料得到了解决,对这四个算法有了一个很好的掌握。圆和椭圆存在区别也由很大的联系,都具有对称性,只需要画出其中的一部分,剩下的弧可以通过对称性来实现,椭圆比圆要复杂些,需要区分上下圆弧。本次试验总体来说比较成功,提高了我对计算机图形学的兴趣。指导教师意见 签名: 年 月 日注:可根据教学需要对以上栏目进行增减。表格内容可根据内容扩充。

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报