概述
Bresenham画法是一种用于计算计算机图形中线条的算法,其原理是沿着所需绘制的线段中的像素点进行递增或递减,来进行准确的点阵绘制。
实现该算法的关键在于确定像素在基准线上的位置,以及在每次迭代时进行相应的调整。该算法比传统的直线算法更快且更准确,在低速处理器和低效内存设备上尤其适用。
Bresenham画法的思想可以拓展到曲线绘制、圆形绘制等其他图像绘制领域。
一、判别式推导
假设直线的表达式为 y = m x + b y = mx + b y=mx+b,并且线段 A D AD AD 与线段 T S TS TS 相交于点 M M M, T M TM TM 的长度为 t t t, M S MS MS 的长度为 s s s。实现算法需要计算 s s s 与 t t t 的大小关系来确定选择上点或者下点。
对于M点以及s与t的大小关系分析得出:
如果给定点 ( x i , y i ) (x_i, y_i) (xi,yi) 和点 ( x i + 1 , y i + 1 ) (x_{i+1}, y_{i+1}) (xi+1,yi+1),使用直线方程式 y = m x + b y = mx + b y=mx+b。那么,点 ( x i + 1 , y i + 1 ) (x_{i+1}, y_{i+1}) (xi+1,yi+1) 的坐标可以表示为:
x i + 1 = x i + 1 y i + 1 = m ( x i + 1 ) + b x_{i+1} = x_i + 1 \\ y_{i+1} = m(x_i + 1) + b xi+1=xi+1yi+1=m(xi+1)+b
此时,点 P P P 的坐标为 ( x i , y i ) (x_i, y_i) (xi,yi),点 S S S 的坐标为 ( x i , y i + 1 ) (x_i, y_i+1) (xi,yi+1),点 T T T 的坐标为 ( x i + 1 , y i + 1 ) (x_i+1, y_i+1) (xi+1,yi+1)。
我们需要计算 s s s 和 t t t 的值来判断绘制线段的方向。
首先, s s s 的值为:
s = y i + 1 − y i = m ( x i + 1 ) + b − ( m x i + b ) = m s = y_{i+1} - y_i = m(x_i + 1) + b - (mx_i + b) = m s=yi+1−yi=m(xi+1)+b−(mxi+b)=m
其次, t t t 的值为:
t = 2 y i + 1 − 2 y i + 2 = 2 ( m ( x i + 1 ) + b ) − 2 ( m x i + b ) + 2 = 2 m ( x i + 1 − x i ) + 2 = 2 m + 2 \begin{aligned} t &= 2y_{i+1} - 2y_i + 2 \\ &= 2(m(x_i + 1) + b) - 2(mx_i + b) + 2 \\ &= 2m(x_i + 1 - x_i) + 2 \\ &= 2m + 2 \end{aligned} t=