《计算机图形学》实验报告模板圆的扫描转换.docVIP

《计算机图形学》实验报告模板圆的扫描转换.doc

  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文档。上传文档
查看更多
《计算机图形学》实验报告模板圆的扫描转换

北京联合大学应用文理学院 实验报告 课程名称 计算机图形学 实验(实训)名称 圆的扫描转换 班级 信息与计算科学 2009级 姓名 学号 同组者 实验(实训)日期 完成日期 本实验(实训)所用学时统计 预习 实验(实训) 报告 总计 评阅意见: 成绩 北京联合大学应用文理学院 实 验 报 告 实验目的 掌握用中点画圆法进行圆的扫描转换方法; 掌握用Bresenham画圆法进行圆的扫描转换方法; 理解中点画圆法与Bresenham画圆法的区别; 算法原理介绍 1、中点画圆算法 假设x坐标为xp的各像素点中,与该圆弧最近者已确定,为P(xp,yp),那么,下一个与圆弧最近的像素只能是正右方的P1(xp+1,yp),或右下方的P2(xp+1,yp-1)两者之一。 令M为P1和P2的中点,易知M的坐标为(xp+1,yp-0.5)。显然,若M在圆内,则P1离圆弧近,应取为下一个像素;否则应取P2。 判别式d: d = F(M)=F(xp+1,yp-0.5)=(xp+1)^2+(yp-0.5)^2-R^2 d的初始值为: d0 = F(1,R-0.5)=1+(R-0.5)^2-R^2=1.25-R 在d≥0的情况下,取右下方像素P2, d = F(xp+2,yp-1.5)=(xp+2)^2+(yp-1.5)^2-R^2=d+2(xp-yp)+5 在d0的情况下,取正右方像素P1, d = F(xp+2,yp-0.5)=(xp+2)^2+(yp-0.5)^2-R^2=d+2xp+3 2、 Bresenham画圆算法 假设生成圆心在坐标原点,半径为r,从x=0到x=y的1/8圆弧。 xi+1=xi +1 相应的y则在两种可能中选择: y=yi,或者y=yi-1 选择的原则是考察理想的y值是靠近yi还是靠近yi-1 判别式: d i+1=2(xi+1)2+yi2+(yi-1)2-2r2 判断式d的初始值为: d0= 3-2r。 如果d i+1=0,则y=yi-1, di+2 =d i+1 + 4(xi- yi)+10 如果d i+10,则y=yi, d i+2 =d i+1+ 4x i+6 程序源代码 1、中点画圆算法 #includegraphics.h #includemath.h #includeconio.h main() { void MidPointCircle(int,int);/*定义主函数变量,MidPointCircle中点画圆算法函数*/ int gdriver,gmode; /*gdriver和gmode分别表示图形驱动器和模式 gdriver=DETECT; /* DETECT是自动选择显示模式 initgraph(gdriver,gmode,c:\\tc3.0\\BGI);/*图形驱动文件的路径 MidPointCircle(200,YELLOW); /*定义圆的半径和颜色*/ getch();/*getch();会等待你按下任意键,再继续执行下面的语句 closegraph();/*关闭图形系统 return(0); /*返回值为0*/ } void MidPointCircle(int r,int color) /*定义函数变量半径和颜色*/ { int x,y; float d; /*float类型中小数位数为7位,即可精确到小数点后7位 x=0; y=r; d=1.25-r; while(xy) /*满足条件xy时进入循环,不满足跳出 { if(d0) {d+=2*x+3; x++;} else { d+=2*(x-y)+5; x++; y--;} putpixel(x+200,y+200,color); putpixel(y+200,x+200,color); putpixel(200-x,y+200,color); putpixel(y+200,200-x,color); putpixel(200+x,200-y,color); putpixel(200-y,x+200,color

文档评论(0)

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

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

1亿VIP精品文档

相关文档