DDA算法画直线

来源:互联网 发布:电信网络为什么那么差 编辑:程序博客网 时间:2024/05/10 22:53

画直线的代码,适合所有斜率的直线

void CMyView::LineDDA(CDC *pDC, int x0, int y0, int x1, int y1, COLORREF clr)

{

       if (x0 == x1)   // 垂直线

       {

              double y = y0, yMax = y1;

              if (y0 > y1)

              {

                     y = y1;

                     yMax = y0;

              }

              while (y <= yMax)

              {

                     pDC->SetPixel(x0, y, clr);

                     ++y;

              }

              return;

       }

       if (y0 == y1)   // 水平线

       {

              double x = x0, xMax = x1;

              if (x0 > x1)

              {

                     x = x1;

                     xMax = x0;

              }

              while (x <= xMax)

              {

                     pDC->SetPixel(x, y0, clr);

                     ++x;

              }

              return;

       }

       double dx = x1 - x0;

       double dy = y1 - y0;

       double k = dy / dx;

       double x = x0, y = y0;

       double xMax = x1, yMax = y1;

       if (k <= 1 && k >= -1)

       {

              if (x0 > x1)

              {

                     x = x1;

                     y = y1;

                     xMax = x0;

                     yMax = y0;

              }

              for (; x <= xMax; ++x)

              {

                     pDC->SetPixel(x, int(y+0.5), clr);

                     y += k;

              }

       }

       else

       {

              if (y0 > y1)

              {

                     x = x1;

                     y = y1;

                     xMax = x0;

                     yMax = y0;

              }

              for (; y <= yMax; ++y)

              {

                     pDC->SetPixel(int(x+0.5), y, clr);

                     x += 1/k;

              }

       }

}

 

原创粉丝点击