高速椭圆绘制程序

来源:互联网 发布:最好的股票行情软件 编辑:程序博客网 时间:2024/05/16 01:32

程序:罗健军


  程序中var16为有符号16位数字型,uvar1616位无符号数字型,uvar32为无符号32位数字型,var32为有符号32位数字型。Ellipse参数中的x0,y0为圆心坐标,r1r2分别为横半径和纵半径。PutPixel为画点函数。

void Ellipse(var16 x0,var16 y0,uvar16 r1,uvar16 r2){ uvar32 r,r12,r22; var16 x,y,xmax; var32 tn;
 x=0;y=r2; r12=r1*r1;r22=r2*r2; xmax=var16(r12/sqrt(r12+r22)); tn=r12-2*r2*r12; 
 while(x<=xmax) {  if(tn<0||y==0)tn+=(4*x+2)*r22;   else   {    tn+=(4*x+2)*r22+(1-y)*4*r12;    y--;   }   
  PutPixel(x0+x,y0+y);  PutPixel(x0-x,y0+y);  PutPixel(x0+x,y0-y);  PutPixel(x0-x,y0-y);  x++; }
 PutPixel(x0+x,y0+y); PutPixel(x0-x,y0+y); PutPixel(x0+x,y0-y); PutPixel(x0-x,y0-y);
 r=r1;r1=r2; r2=(uvar16)r; x=0;y=r2; r12=r1*r1;r22=r2*r2; xmax=var16(r12/sqrt(r12+r22)); tn=r12-2*r2*r12; 
 while(x<=xmax) {  if(tn<0||y==0)tn+=(4*x+2)*r22;   else   {    tn+=(4*x+2)*r22+(1-y)*4*r12;    y--;   }   
  PutPixel(x0+y,y0+x);  PutPixel(x0+y,y0-x);  PutPixel(x0-y,y0+x);  PutPixel(x0-y,y0-x);  x++; } 
 PutPixel(x0+y,y0+x); PutPixel(x0+y,y0-x); PutPixel(x0-y,y0+x); PutPixel(x0-y,y0-x);}

原创粉丝点击