基于维基百科关于 Bresenham 的线算法的文章,我已经实现了那里描述的简化版本,我的 Java 实现如下所示:
int dx = Math.abs(x2 - x1);
int dy = Math.abs(y2 - y1);
int sx = (x1 < x2) ? 1 : -1;
int sy = (y1 < y2) ? 1 : -1;
int err = dx - dy;
while (true) {
framebuffer.setPixel(x1, y1, Vec3.one);
if (x1 == x2 && y1 == y2) {
break;
}
int e2 = 2 * err;
if (e2 > -dy) {
err = err - dy;
x1 = x1 + sx;
}
if (e2 < dx) {
err = err + dx;
y1 = y1 + sy;
}
}
现在我明白了,它err
控制了 x 轴上的步数与 y 轴上的步数之间的比率——但现在我应该记录代码在做什么,但我无法清楚地表达它的用途,以及为什么if 语句是这样的,它们是如何err
变化的,以及为什么会以代码中看到的方式发生变化。
维基百科没有指向任何更详细的解释或来源,所以我想知道:
使用此简化版本的 Bresenham 线算法,究竟做了什么err
?dx
dy