高速椭圆绘制程序

程序:罗健军


  程序中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);
}
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值