Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15183141
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: C/C++

2008-05-31 14:41:17

void CcircleDlg::Line(int x0, int y0, int x1,int y1, int color)

    {

    CDC *dc=GetDC();

     int dx = abs(x1 -x0);

       int dy =abs(y1-y0);

       int ix0=x0,iy0=y0,ix1=x1,iy1=y1,jx0=x0,jy0=y0,jx1=x1,jy1=y1;

       int dx2 = dx << 1;

       int dy2 = dy << 1;

       int e  = dy2 - dx;  // 决策量

       int half = (dx+1) >> 1;
       if(y1        y1=2*y0-y1;//转化到第三象限
       if(x1        x1=2*x0-x1;

       for (int i=0; i<=half; i++)

       {
      if(iy1      {
       jy0=2*iy0-y0;//再次转化回来
       jy1=2*iy0-y1;
      }
      else
      {
       jy1=y1;
       jy0=y0;
      }
      if(ix1      {
       jx0=2*ix0-x0;//再次转化回来
       jx1=2*ix0-x1;
      }
      else
      {
       jx0=x0;
       jx1=x1;
      }
       dc->SetPixel(jx0, jy0, color);

       dc->SetPixel(jx1, jy1, color);

       if (e > 0)  // 当e>0时,始端y向加1,末端y向减1

       {

        y0++;

        y1--;

        e -= dx2;

       }

       //始端x向加1,末端x向减1

       x0++;

       x1--;

       e += dy2;

       }

    }

阅读(854) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~