高速椭圆绘制程序

转载 2006年06月12日 18:56:00

程序:罗健军


  程序中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);
}

相关文章推荐

第一个Silverlight程序,绘制一个长方型、一个椭圆、画一条线

第一个Silverlight程序,绘制一个长方型、一个椭圆、画一条线 1、首先新建一个Silverlight程序,然后新建一个UserControl页面命名为whatxaml.xaml,在前台绘制图...

画笔小程序,可以实现直线椭圆矩形绘制,文字绘制,背景前景颜色变化

一个画笔程序

图形学中用C++编写椭圆程序

  • 2010-06-22 22:05
  • 19.48MB
  • 下载

matlab画椭圆的程序

最小二乘法用于直线,多项式,圆,椭圆的拟合及程序实现

参考: http://blog.csdn.net/jairuschan/article/details/7517773/

Win32下绘图程序(一)画线、画矩形、画椭圆

1、 2、 3、
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)