我正在尝试在 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
这是我的程序发生的事情的图片