您的位置:首页 > 其它

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

2010-01-15 14:57 344 查看
无数次的把这个算法忘掉,还是重新记录一下的好

通过斜截式y=dy/dx+B 其中dy=y1-y0, dx=x1-x0, 导出直线隐式函数F(x,y)=dy*x-dx*y+dx*B=0
可知对直线下方的点F(x,y)为正,直线上方的点为负

对下一步将要选择的垂直方向上相邻的两像素NE与E,其中点为M,当前选择了的像素坐标为(xp,yp)
则M为F(xp+1,yp+1/2),只需判断此函数的符号即可决定选择NE或者E

设判定变量d=F(xp+1,yp+1/2), d>0时选择下方像素E,d<0时选择上方像素NE,d=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沿x和y方向上都递增一步
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,即2dy和2(dy-dx)不影响结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: