布雷森汉姆直线演算法(Bresenham’s line algorithm)是用来描述两点间决定一条直线的算法,本人发现它可以用于确定栅格地图中两点间直线经过的栅格位置,它会算出一条线段在点阵图上最接近的点。这个算法只会用到较为快速的整数加减法和位元位移,常用绘制电脑平面中的直线,是计算机图形学中最先发展出来的演算法。
Jack E.Bresenham于1962年在IBM发明了此算法,于1963年在丹佛举行的美国计算机协会全国大会上发表了该演算法,论文则刊登在1965年的 IBM Systems Journal 之中。经过少量的延伸之后,原本用于画直线的演算法也可以用来画圆,且同样可用较为简单的算术运算来完成,避免了计算二次方程、三角函数或递归的分解较为简单的步骤。修改后的算法称为Bresenham 画圆演算法或中点画圆演算法。
演算方法
假设我们需要从(x0,y0)这一点到(x1,y1)画一条直线,两点之间的水平距离为x1-x0,垂直距离为y1-y0,直线斜率设为m(方便理解,假设0<m<1),由于斜率在0到1之间,故我们只需要找出当x到达某个数值时会使得y值加1的位置,若x未到达这个位置,y值保持不变。
要实行这个思想,我们需要计算每个像素点到该直线之间的误差,每当x的值增加1,误差的值就会增加m,当累积的误差超出0.5,说明y值该发生变化了,直线比较靠近下一个像素点,y值加1。
理解这个思想了,其他数值斜率的也可理解了。