0

我正在尝试在 C++ 绘图程序中实现 Bresenham 线算法。

当 x 增加时它画得很好,但它似乎做了一个奇怪的算法

int dx = old_x - x;
int dy = old_y - y;

if (dx >= 0){
    step_x = 1;
} else {
    step_x = -1;
    dx = fabs(dx);
}

if (dy >= 0){
    step_y = 1;
} else {
    step_y = -1;
    dy = fabs(dy);
}

int dx2 = dx * 2;
int dy2 = dy * 2;

if (dx > dy){
    err =  dy2 - dx;

    for (int i = 0; i <= dx; i++){
        currTool.draw(old_x, old_y);
        if (err >= 0){
            err -= dx2;
            old_y += step_y;
        }
        err += dy2;
        old_x += step_y;
    }
} else {
    err = dx2 - dy;

    for (int i = 0; i <= dy; i++){
        currTool.draw(old_x, old_y);
        if (err >= 0){
            err -= dy2;
            old_x += step_x;
        }
        err += dx2;
        old_y += step_y;
    }
}

我尝试了多种方法,例如翻转 x,y 我已经按照多个示例重写了代码并且没有运气。

这是我转换的网站的链接

http://www.falloutsoftware.com/tutorials/dd/dd4.htm

这是我的程序发生的事情的图片

在此处输入图像描述

4

0 回答 0