第四讲 改进Bresanham算法圆扫描转换.pptVIP

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 济南大学信息学院 * 以上算法仅考虑,0≤k≤1时的情况,对于其它情况依此类推。 以1≤k为例说明 * 济南大学信息学院 * 1≤k d k k d * 济南大学信息学院 * 对于点Pi(xi,yi) 令e=d-0.5 K1 * 济南大学信息学院 * 再用2e△y来替换e e初=-△y, 每走一步有e=e+1/k=e+2△x。 if (e0) then e=e-2△y K1 * 济南大学信息学院 * 算法步骤: ( k ≧1 ) 1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。 2.计算初始值△x、△y、e=-△y、x=x0、y=y0。 3.绘制点(x,y)。 4.e更新为e+2△x,判断e的符号。若e0,则(x,y)更新为(x+1,y+1),同时将e更新为e-2△y;否则(x,y)更新为(x+1,y)。 5.当直线没有画完时,重复步骤3和4。否则结束。 * 信息科学与工程学院 * 圆的扫描转换 解决的问题: 绘出圆心在原点,半径为整数R的圆x2+y2==R2 圆心不在原点的圆,先平移至原点,扫描转换后再平移回原位置 * 信息科学与工程学院 * B(y,x) C(-y,x) D(-x,y) E(-x,-y) F(-y,-x) G(y,-x) H(x,-y) A 5.2.1 八分法画圆 * 信息科学与工程学院 * 程序段为: void circlepoint(int x,int y) { putpixel(x,y,14); putpixel(y,x,14); putpixel(-y,x,14); putpixel(-x,y0,14); putpixel(-x,-y,14); putpixel(-y,-x0,14); putpixel(y,-x,14); putpixel(x,-y,14); } 程序Cir8f0.c (0,0)为圆心, (x,y)为圆上的点 * 信息科学与工程学院 * 程序段为: void circlepoint(int x,int y,int x0,int y0) { putpixel(x+x0,y+y0,14); putpixel(y+x0,x+y0,14); putpixel(-y+x0,x+y0,14); putpixel(-x+x0,y+y0,14); putpixel(-x+x0,-y+y0,14); putpixel(-y+x0,-x+y0,14); putpixel(y+x0,-x+y0,14); putpixel(x+x0,-y+y0,14); } 程序Cir8f.c (x0,y0)为圆心, (x,y)为以(x0,y0)为圆心的圆上的点 * 信息科学与工程学院 * 解决问题: 要得到整个圆的扫描像素集,只要扫描转换1/8圆弧即可 * 信息科学与工程学院 * 5.2.2 简单方程产生圆弧 算法原理:利用其函数方程,直接离散计算 1/8圆弧 方法1——笛卡尔方程直接计算 * 信息科学与工程学院 * 圆的方程绘制方法C++实现 void 圆的方程绘制( ) { double xc=300,yc=200,R=150; double xr=300+150/1.414; double x, y; for(x=xc; x=xr; x++) { y=sqrt(R*R-(x-xc)*(x-xc))+yc; SetPixel(x,y,RGB(0,0,0)); } } 这一方法包括乘法和平方根运算,计算量较大,所画象素位置间的间距也是不一致的。 * 信息科学与工程学院 * 圆的极坐标方程为: 方法2——圆的极坐标方程 将? 离散化 0≤k≤n * 信息科学与工程学院 * 使用上述离散化方程,可以得到如下算法: begin for k﹦0 to n x﹦xc﹢Rcos(2?.k/n) y﹦yc﹢Rsin(2?.k/n) putpixel(x,y) next k endfor end 使用上述方法可沿圆周等距点绘制出圆来。算法中,n取的值越大,计算的点越多,但执行时间越长。此算法的缺点是含有三角函数,计算量大。 * 信息科学与工程学院 * 为了避免三角函数运算,考虑下图,如果已经计算出圆上一点(xk,yk),则增加一个角度? 后,下一点(xk+1,yk+1)的坐标值可以用上一个点表示出。 xk+1﹦Rcos

文档评论(0)

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

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

1亿VIP精品文档

相关文档