之前我们使用DDA来画线, 这种算法每步只进行一个加法运算,那么加法运算李里边有浮点数, 我们是否还可以再提高效率 也就是把浮点运算变成整数加法, 或者改变直线方程类型
中点画线算法
利用直线的一般方程 Ax + By + C = 0
对于一般直线方程,
对于直线上的点, 那么 Ax + By + C = 0
对于直线上方的点, 那么 Ax + By + C > 0
对于直线下方的点, 那么 Ax + By + C < 0
每次在最大位移方向走一步, 另一个方向走还是不走,取决于中点误差的判断
假设 0 <= |k| <= 1. 因此,每次在x方向+1, y方向 是否加一需要作出判断
对于该直线, xi的位置则是 取pi, 因为交点在 yi 到y (i+1) 的中点的下方, 下一个点则是取 pu 这个点, 因为交点在中点上方
至于如何判断中点是在直线的上方还是下方
我们就把中点坐标带入到直线方程判断是否大于零, 假设中点坐标是m, 那么就是判断
di = Amx + Bmy +C 的大小, 也就是
di = A(xi + 1) + B (yi + 0.5) + C
中点画线算法需要 四个加法,两个乘法,似乎效率也并没有多高
增量计算
1. d < 0
推导可得, d1 = d0 + A + B
2. d >= 0
推导 d1 = d0 + A
3. 计算初始值d0
d0 = A + 0.5B
由于这里还是有0.5这个计算, 而且我们只需要判断d的正负号, 所以我们可以用2d来代替d计算
也就是2d0 = 2A + B这样就全都是整数了.