- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
解决方法 简单方程产生圆弧 中点画圆Bresenhem算法 生成圆弧的正负法 X2 + Y2 = R2 Y = Round(Sqrt(R2 - X2)) 在一定范围内,每给定一 X值,可得一Y值。 当X取整数时,Y须取整。 缺点:浮点运算,开方, 取整,不均匀。 5.2.2 中点Bresenham画圆 MidpointCircle(int r, int color) { int x,y; float d; x=0; y=r; d=1.25-r; drawpixel(x,y,color); while(xy){ if(d0){ d+ = 2*x+3; x++ } else{d+ = 2*(x-y) + 5; x++;y--; } } } 用中点画圆算法生成半径为10的圆 上述算法能否再改进呢? 注意到d的增量是x,y的线性函数 每当x递增1,则d的增量递增Δx=2 每当y递减1,则d的增量递增Δy=2 Δx初始值=3;Δy初始值=-2r+2 即求得Pi点后选择下一个象素点Pi+1的规则为: 当F(xi,yi) ≤0 取xi+1 = xi+1,yi+1 = yi; 当F(xi,yi) >0 取xi+1 = xi, yi+1 = yi - 1; 这样用于表示圆弧的点均在圆弧附近,且使F(xi,yi) 时正时负,故称正负法。 快速计算的关键是F(xi,yi) 的计算,能否采用增量算法? 若F(xi,yi) 已知,计算F(xi+1,yi+1) 可分两种情况: 1、F(xi,yi)≤0- xi+1 = xi+1,yi+1 = yi; - F(xi+1,yi+1)= (xi+1 )2 +(yi+1 )2 -R2 - = (xi+1)2+ yi2 -R2 = F(xi,yi) +2xi +1 2、 F(xi,yi)>0- xi+1 = xi,yi+1 = yi -1; - F(xi+1,yi+1)= (xi+1 )2 +(yi+1 )2 -R2 - = xi2+(yi –1)2-R2 = F(xi,yi) - 2yi +1 3、初始值:略 5.3 椭圆的扫描转换 判别式 若d1≤0,取Pu(xi+1,yi) 若d10,取Pd(xi+1,yi-1) 5.3 椭圆的扫描转换 误差项的递推 d1≤0: 5.3 椭圆的扫描转换 误差项的递推 d10: 判别式的初始值 5.3 椭圆的扫描转换 再来推导椭圆弧下半部分的绘制公式 5.3 椭圆的扫描转换 5.3 椭圆的扫描转换 判别式 若d20,取Pl(xi,yi-1) 若d2≤0,取Pr(xi+1,yi-1) 5.3 椭圆的扫描转换 误差项的递推 d20: 5.3 椭圆的扫描转换 d2≤0: 注意: 上半部分的终止判别 下半部分误差项的初值 ?算法步骤: 1. 输入椭圆的长半轴a和短半轴b。 2. 计算初始值d=b2+a2(-b+0.25)、x=0、y=b。 3. 绘制点(x,y)及其在四分象限上的另外三个对称点。 5.3 椭圆的扫描转换 4.判断d的符号。若d≤0,则先将d更新为d+b2(2x+3),再将(x,y)更新为(x+1,y);否则先将d更新为d+b2(2x+3)+a2(-2y+2),再将(x,y)更新为(x+1,y-1) 5.当b2(x+1)a2(y-0.5)时,重复步骤3和4。否则转到步骤6。 6.用上半部分计算的最后点(x,y)来计算下半部分中d的初值: 5.3 椭圆的扫描转换 7. 绘制点(x,y)及其在四分象限上的另外三个对称点。 8. 判断d的符号。若d≤0,则先将d更新为b2(2xi+2)+a2(-2yi+3),再将(x,y)更新为(x+1,y-1);否则先将d更新为d+a2(-2yi+3),再将(x,y)更新为(x,y-1)。 9. 当y0时,重复步骤7和8。否则结束。 5.3 椭圆的扫描转换 本 次 授 课 结 束 谢 谢 ! x = x0 + Rcos? y = y0 + Rsin? dx =- Rsin?d? dy = Rcos?d? xn+1 =x n + dx y n+1 =y n + dy xn+1 = x n + dx = x n - Rsin?d? =x n - (y n - y 0 )d? y n+1 = y n + dy = y n + Rcos
文档评论(0)