计算机扫描直线原理:
直线方程:y=kx+b y-kx-b=0
在第一象限画线 (X0,Y0)->(X1,Y1)
当前点Pi (Xi , Yi)
则下一点必为P1( Xi +1, Yi) 或 P2( Xi +1, Yi+1)。
理想直线靠近哪个点,就取那个点。
推导:
令F(x,y)=y-kx-b,那么理想直线上方有F>0,下方F<0.
取P1 P2中点M(Xi +1, Yi+0.5),
则F(M)<0,M在F下,应该取P2 ;反之取P1 ;
令di=F(Mi)=Yi+0.5-k(Xi +1)-b
则di<0时第i+1个点 Pi+1(Xi +1, Yi+1)
di+1=di+1-k
di>0时 Pi+1(Xi +1, Yi)
di+1=di-k
d0=0.5-k
由以上递推公式可以确定每一个像素点坐标,从而画出直线。
优化(只需要d的符号):
k=Δy/Δx 而一象限Δx为正
2Δxd0=1-2Δy //避免k的除法 0.5的浮点数
2Δxdi+1=2Δxdi+2Δx - 2Δy 或 2Δxdi+1=2Δxdi-2Δy
结论:
重新令d0=1-2Δy
则 di+1=di+2Δx - 2Δy 或 di+1=di-2Δy
由此,该算法优点可以看出:没有除法 只用到整数加减,所以该算法是高效的。