计算机图形学作业-给定圆心,半径,弧度和起始点绘制圆弧_第1页
计算机图形学作业-给定圆心,半径,弧度和起始点绘制圆弧_第2页
计算机图形学作业-给定圆心,半径,弧度和起始点绘制圆弧_第3页
计算机图形学作业-给定圆心,半径,弧度和起始点绘制圆弧_第4页
计算机图形学作业-给定圆心,半径,弧度和起始点绘制圆弧_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第六组第六组中点画圆算法中点画圆算法假设x坐标为 的各像素点中,与该圆弧最近者已确定,为 ,那么,下一个与圆弧最近的像素只能是正右方的 ,或右下方的两者之一。令M为 和 的中点,易知M的坐标为 。显然,若M在圆内,则 离圆弧近,应取为下一个像素;否则应取 。 px1, 12ppyxp), 1(1ppyxp1pppyxp,2p2p1p5 . 0, 1pPyx222),(RyxyxF对于圆上的点,F=0;对于圆内的点,F0;令函数 判别式d: d的初始值为: 在d0的情况下,取右下方像素 , 在d0的情况下,取正右方像素 , 2225 . 015 . 0, 1RyxyxFMFdppppRRRRFd

2、25. 1)5 . 0(1)5 . 0, 1 (220525 . 125 . 1, 2222pppPpPyxdRyxyxFd 325 . 025 . 0, 2222pppppxdRyxyxFd2p1p为了消除在计算判别式初始值产生的浮点数运算,将用4d来代替d。下述程序使用中点画圆算法绘制一个1/8圆弧。void MidPointCircle(int r,int color) int x,y,d x=0; y=r; d=5-4r; CirclePoint(x,y,color); while(x=y) if(d=0) d+=8x+12; else d+=8(x-y)+20;y-; x+; Cir

3、clePoint(x,y,color); 考虑到中点画圆法画的是单调区间,我们做以下四种分析:(我们只做逆时针绘制)(我们只做逆时针绘制)令函数 领判别式为222)()(),(FRyyxxyxcc25. 0R21x2x2xx2xx)5 . 0,1()(d222cc2c2ciciciiiiciciiyyyyyyyyxxFMF如果如果di0,di=0,di=0,说明说明M M在圆外或圆上,下一点取(在圆外或圆上,下一点取(xi+1xi+1,yi-1yi-1)即即x xi+1i+1=x=xi i+1+1, y yi+1i+1=y=yi i-1-1新的判别式为新的判别式为52222d)5 . 1,2(

4、d1ciciiciciiyyxxyyxxF初始去浮点令hi=di-0.25则25. 0R21x2x2xx2xx)5 . 0,1(d200220c0c02c20000cccccyyyyyyyyxxF200220c0c02c20000R21x2x2xx2xx)5 . 0,1(hcccccyyyyyyyyxxF如果如果hi0.25hi0.25,即,即hi0hi=0.25,hi=0.25,即即hi=0,hi=0,说明说明M M在圆外或圆上,下一点取在圆外或圆上,下一点取(xi+1xi+1,yi-1yi-1)即)即x xi+1i+1=x=xi i+1+1,y yi+1i+1=y=yi i-1-1新的判别

5、式为新的判别式为322dh1ciiixx52222dh1ciciiiyyxxvoid MidPointCircle(int x0,int y0,int xc,int yc,int R,int color) int x,y,h; x=x0; y=y0; d=x*x+xc*xc-2x*xc+2x-2xc+y*y+yc*yc-y+yc-2*y*yc-R*R+1; CirclePoint(x,y,color); while(L(x,y)1&yyc) / L(x,y)当前点到终点的距离 if(h0) h+=2*x-2xc+3; else h+=2*x-2xc-2*y+2*yc+5; y-; x+; Ci

6、rclePoint(x,y,color); 令函数领判别式为领判别式为222)()(),(FRyyxxyxcc25. 1R222xxxx2xx)1,5 . 0()(d222cc2c2ciciciiiiciciiyyyyyyyyxxFMF如果如果di0,di=0,di=0,说明说明M M在圆外或圆上,下一点取(在圆外或圆上,下一点取(xi-1xi-1,yi-1yi-1)即即x xi+1i+1=x=xi i-1-1, y yi+1i+1=y=yi i-1-1新的判别式为新的判别式为52222d)2,5 . 1(d1ciciiciciiyyxxyyxxF初始去浮点令hi=di-0.25则25. 1R

7、222xxxx2xx)1,5 . 0(d200220c0c02c20000cccccyyyyyyyyxxF1R222xxxx2xx)1,5 . 0(h200220c0c02c20000cccccyyyyyyyyxxF如果如果hi0.25hi0.25,即,即hi0hi=0.25,hi=0.25,即即hi=0,hi=0,说明说明M M在圆外或圆上,下一点取在圆外或圆上,下一点取(xi-1xi-1,yi-1yi-1)即)即x xi+1i+1=x=xi i-1-1,y yi+1i+1=y=yi i-1-1新的判别式为新的判别式为322dh1ciiiyy52222dh1ciciiiyyxxvoid Mi

8、dPointCircle(int x0,int y0,int xc,int yc,int R,int color) int x,y,h; x=x0; y=y0; d=x*x+xc*xc-2x*xc-x+xc+y*y+yc*yc-2y+2yc-2*y*yc-R*R+1; CirclePoint(x,y,color); while(L(x,y)1&xxc) if(h0) h+=2*yc-2y+3; else h+=2*xc-2x-2*y+2*yc+5; y-; x+; CirclePoint(x,y,color); 令函数领判别式为领判别式为222)()(),(FRyyxxyxcc25. 1R2x

9、2x2xx2xx)5 . 0,1()(d222cc2c2ciciciiiiciciiyyyyyyyyxxFMF如果如果di0,di=0,di=0,说明说明M M在圆外或圆上,下一点取(在圆外或圆上,下一点取(xi-1xi-1,yi+1yi+1)即即x xi+1i+1=x=xi-i-1 1, y yi+1i+1=y=yi+i+1 1新的判别式为新的判别式为52222d)5 . 1,2(d1ciciiciciiyyxxyyxxF初始去浮点令hi=di-0.25则25. 1R2x2x2xx2xx)5 . 0,1(d200220c0c02c20000cccccyyyyyyyyxxF1R2x2x2xx2

10、xx)5 . 0,1(h200220c0c02c20000cccccyyyyyyyyxxF如果如果hi0.25hi0.25,即,即hi0hi=0.25,hi=0.25,即即hi=0,hi=0,说明说明M M在圆外或圆上,下一点取在圆外或圆上,下一点取(xi-1xi-1,yi+1yi+1)即)即x xi+1i+1=x=xi i-1-1,y yi+1i+1=y=yi i+1+1新的判别式为新的判别式为322dh1ciiixx52222dh1ciciiiyyxxvoid MidPointCircle(int x0,int y0,int xc,int yc,int R,int color) int x

11、,y,h; x=x0; y=y0; d=x*x+xc*xc-2x*xc+2x-2xc+y*y+yc*yc-y+yc-2*y*yc-R*R+1; CirclePoint(x,y,color); while(L(x,y)1&xxc) if(h0) h+=2*xc+2x+3; else h+=2*xc-2x-2*yc+2*y+5; y-; x+; CirclePoint(x,y,color); 令函数令判别式为令判别式为222)()(),(FRyyxxyxcc25. 1R222xxxx2xx)1,5 . 0()(d222cc2c2ciciciiiiciciiyyyyyyyyxxFMF如果如果di0,

12、di=0,di=0,说明说明M M在圆外或圆上,下一点取(在圆外或圆上,下一点取(xi+1xi+1,yi,+1yi,+1)即即x xi+1i+1=x=xi i+1+1, y yi+1i+1=y=yi i+1+1新的判别式为新的判别式为52222d)2,5 . 1(d1ciciiciciiyyxxyyxxF初始去浮点令hi=di-0.25则25. 1R222xxxx2xx)1,5 . 0(d200220c0c02c20000cccccyyyyyyyyxxF1R222xxxx2xx)1,5 . 0(h200220c0c02c20000cccccyyyyyyyyxxF如果如果hi0.25hi0.25,即,即hi0hi=0.25,hi=0.25,即即hi=0,hi=0,说明说明M M在圆外或圆上,下一点取在圆外或圆上,下一点取(xi+1xi+1,yi+1yi+1)即)即x xi+1i+1=x=xi i+1+1,y yi+1i+1=y=yi i+1+1新的判别式为新的判别式为322dh1ciiiyy52222dh1ciciiiyyxxvoid MidPointCircle(int x0,int y0,int xc,int yc,int R,int color) int x,y,h; x=x0; y=y0; d=x*x+xc*xc-2x*xc+x-xc+y*y+yc*y

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论