直线的扫描转换-中点线算法推导

无数次的把这个算法忘掉,还是重新记录一下的好

 

       通过斜截式y=dy/dx+B 其中dy=y1-y0, dx=x1-x0, 导出直线隐式函数F(x,y)=dy*x-dx*y+dx*B=0

可知对直线下方的点F(x,y)为正,直线上方的点为负

 

       对下一步将要选择的垂直方向上相邻的两像素NEE,其中点为M,当前选择了的像素坐标为(xp,yp)

MF(xp+1,yp+1/2),只需判断此函数的符号即可决定选择NE或者E

 

设判定变量d=F(xp+1,yp+1/2), d>0时选择下方像素Ed<0时选择上方像素NEd=0时皆可

 

现考察d的变化方式,根据本次的选择NE还是E而不同

 

1)选择E时,M沿x方向上递增一步

       dnew=F(xp+2,yp+1/2)

       dold=F(xp+1,yp+1/2)

       所以dnew=dold+dy

 

2)选择NE时,M沿xy方向上都递增一步

      dnew=F(xp+2,yp+3/2)

       dold=F(xp+1,yp+1/2)

      所以dnew=dold+dy-dx

 

d的初始值:dstart=F(x0+1,y0+1/2)=dy-dx/2

为消除d的小数,需消除除法运算,将F(x,y)乘以2,即F(x,y)=2(dy*x-dx*y+dx*B) 于是所有的增量同样乘以2,即2dy2(dy-dx)不影响结果

 

你可能感兴趣的:(算法,XP)