3、提高.yxF(x,y)=0F(x,y)>0F(x,y)<0(x1,y1)(x0,y0)直线方程:F(x,y)=ax+by+c=0直线将二维空间划分为三个区域:如F(x,y)=0,则(x,y)在直线上如F(x,y)<0,则(x,y)在直线下方如F(x,y)>0,则(x,y)在直线上方条件:a=-(y1-y0)b=(x1-x0)c=-B(x1-x0)设(x0,y0)和(x1,y1)分别为直线的两端点Dy=y1-y0,Dx=x1-x0由y=kx+B及k=Dy/Dx,k∈[0,1]得:y=(Dy/Dx).x+BDy.x-Dxy+Dx.
4、B=0则直线一般方程为:F(x,y)=Dy.x-Dx.y+B.Dx=0a=Dy,b=-Dx,c=B.Dx设(x,y)为直线上一点,将点P=(x,y+m)代入直线方程:F(x,y+m)=Dy.x-Dx.(y+m)+B.Dx=(Dy.x-Dx.y+B.Dx)-Dx.m=F(x,y)-Dx.m=-Dx.m因为Dx>0ifm>0(即P点在直线上方)thenF(x,y+yb)<0;ifm<0(即P点在直线下方)thenF(x,y+yb)>0;定义决策变量:d=F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c如果d>0
5、,则M在理想直线上方,选正右方E点如果d<0,则M在理想直线下方,选右上方NE点如果d=0,则M在理想直线上,选E/NE点由于d是xi和yi的线性函数kÎ[0,1],可采用增量计算数提高运算效率.1.如由pi点确定在是正右方E点(d>0).,则新的中点M仅在x方向加1,新的d值为:dnew=F(xi+2,yi+0.5)=a(xi+2)+b(yi+0.5)+c而dold=F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+cdnew=dold+a=dold-dy2.如由pi点确定是右上方NE点(d<0),则新的中点
6、M在x和y方向都增加1,新的d值为dnew=F(xi+2,yi+1.5)=a(xi+2)+b(yi+1.5)+c而dold=F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+cdnew=dold+a+b=dold-dy+dx在每一步中,根据前一次第二迭中计算出的d值的符号,在正右方和右上方的两个点中进行选择.d的初始值:d0=F(x0+1,y0+0.5)=F(x0,y0)+a+b/2=a+b/2=-dy+dx/2F(x0,y0)=0(x0,y0)在直线上为了消除d的分数,重新定义F(x,y)=2(ax+by+c
7、)则每一步需要计算的dnew是简单的整数加法dy=y1-y0dx=x1-x0d0=-2dy+dxdnew=dold-2*dy当dold>=0dnew=dold-2(dy-dx)当dold<0Bresenham画线算法与DDA算法相似,Bresenham画线算法也要在每列象素中找到与理想直线最逼近的象素点。根据直线的斜率来确定变量在x或y方向递增一个单位。另一个方向y或x的增量为0或1,它取决于实际直线与最接近网格点位置的距离。这一距离称为误差。算法的巧妙构思,使每次只需检查误差项(增量)的符号即可。定义决策变量d=d+k(0<
8、k<1)设0=0.5)当d>1时,让d=d-1,以保证0<=d<1d0=0定义决策变量d=d+k(0