画直线其实是绘制了无数个点去模拟这条直线。本节解决何时移动直线y的问题。

int sum_error = 0;// 保存误差总和
int delta_error = 2 * abs(dy);// 每一步出现的误差
for (int x = x0; x <= x1; x++)
{
// 误差量递增
sum_error += delta_error;
// 如果误差超过dx,根据斜率的正负来决定y坐标增加或者减少。并更新误差
if(sum_error > dx)
{
// 更新 y的值
y += (y1 > y0 ? 1 : -1);
// 更新误差
sum_error -= 2 * dx;
}
}
这是Bresenham线段算法的核心部分,用于计算直线上的点。在每个迭代步骤中,通过计算误差(sum_error)来决定是否在y方向上移动到下一个像素点,或者保持在当前像素点。delta_error是一个常量,代表在x方向上移动1个像素点对应的y方向上的误差。如果sum_error大于dx,则在y方向上移动1个像素点,即增加或减少y的值,具体取决于x轴方向上的斜率是正还是负。最后,更新sum_error以反映更新y坐标后的新误差。