用Bresenham算法画直线(二)

来源:互联网 发布:淘宝进货哪里的好 编辑:程序博客网 时间:2024/06/05 17:16

//采用vc++6.0的MFC

void CGac1View::OnDraw(CDC* pDC)
{  
 CGac1Doc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 // TODO: add draw code for native data here
 
 int x1=9, y1=9, x2=99, y2=99, c=1;
    int dx; int dy; int x; int y; int p; int const1; int const2;
    int inc; int tmp;
    dx=x2-x1; dy=y2-y1;

    if (dx*dy>=0) /*准备x或y的单位递变值。*/
    inc=1;
    else
    inc=-1;
    if (abs(dx)>abs(dy)){
    if(dx<0){
       tmp=x1; /*将2a, 3a象限方向*/
       x1=x2; /*的直线变换到1a, 4a*/
       x2=tmp;
       tmp=y1; /*象限方向去*/
       y1=y2;
       dx=-dy;
       dy=-dy;
 }

     p=2*dy-dx;
     const1=2*dy; /*注意此时误差的*/
     const2=2*(dy-dy); /*变化参数取值. */

     x=x1;
     y=y1;

     pDC->SetPixel(x, y, c);

     while (x<x2){

     x++;
     if(p<0)
        p+=const1;
     else{
        y+=inc;
        p+=const2;
  }

     pDC->SetPixel(x, y, c);
  }
 }

     else {
        if (dy<0){
            tmp=x1; /* 将3b, 4b象限方向的*/
            x1=x2; /*直线变换到2b, 1b */
            x2=tmp; /*象限方向去. */
            tmp=y1;
            y1=y2;
            dx=-dy;
            dy=-dy;
  }

         p=2*dx-dy; /*注意此时误差的*/
         const1=2*dx; /*变化参数取值. */
         const2=2*(dx-dy);
         x=x1;
         y=y1;
         pDC->SetPixel(x, y, c);
         while (y<y2){
              y++;
              if(p<0)
                 p+=const1;
               else{
                 x+=inc;
                 p+=const2;
                 pDC->SetPixel(x, y, c);
      }
  }
  }
}

原创粉丝点击