C语言bresenhamLine算法

时间:2018-03-20 04:53:38

标签: c algorithm line

我对此算法中可能存在的问题感到困惑:

使用以下参数:

ine temp = {(Vector){10, 150}, (Vector){120, 40}, polygon->color}; 
drawaLine(monitor, &temp);

但是,当我将坐标更改为120, 20时,它会失败:

Line temp = {(Vector){10, 150}, (Vector){120, 20}, polygon->color}; 
drawaLine(monitor, &temp);

我的代码是:

    int changed = 0;
    int x = line->start.x;
    int y = line->start.y;
    int dx = (line->end.x - line->start.x);
    int dy = (line->end.y - line->start.y);

    dx = (dx < 0) ? -dx : dx;
    dy = (dy < 0) ? -dy : dy;

    int signx;
    int signy;

    if ((line->end.x - line->start.x) == 0) {

            signx = 0;
    } else {
        int tempsignx = (line->end.x - line->start.x);
        signx = (tempsignx < 0) ? -1 : 1;
    }

    if ((line->end.y - line->start.y) == 0) {

        signy = 0;
    } else {
            int tempsingy = (line->end.y - line->start.y);
        signy = (tempsingy < 0) ? -1 : 1;
    }


    //swap values
    if (dy > dx) {
        int temp = dy;
        dy = dx;
        dx = temp;
        changed = 1;        //changed = true
    }

    int e = 2 * dy - dx;

    for (int i = 1; i <= dx; i++) {


        Vector temp = {x, y};

        drawPixel(monitor,  temp, line->color);
        while (e >= 0) {

                  if (changed) {

                      x = x + signx;
                    } else {

                      y = y + signy;
                      e = e - 2 * dx;
                }
       }
        if (changed) {

          y += signy;
         } else {

          x += signx;
          e = e + 2 * dy;
        }


      Vector x2y2 = {line->end.x, line->end.y};
      drawPixel(monitor, x2y2, line->color);
  }

}

0 个答案:

没有答案