收藏 分享(赏)

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

上传人:myw993772 文档编号:6907041 上传时间:2019-04-26 格式:DOC 页数:13 大小:174.50KB
下载 相关 举报
贵州大学--实验二:圆和椭圆的生成算法.doc_第1页
第1页 / 共13页
贵州大学--实验二:圆和椭圆的生成算法.doc_第2页
第2页 / 共13页
贵州大学--实验二:圆和椭圆的生成算法.doc_第3页
第3页 / 共13页
贵州大学--实验二:圆和椭圆的生成算法.doc_第4页
第4页 / 共13页
贵州大学--实验二:圆和椭圆的生成算法.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

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营业执照举报