putpixel(x,y,color); while (x<x1) {
if (d<0) { x++; y++; d+=delta2; //取P2,并且计算下一点的d值 } else { x++; d+=delta1; //取P1,并且计算下一点的d值 } putpixel(x,y,color); } }
当|k|≤1时,让x每步增加1,y最多增加1,
然后用四舍五入的方法来确定直线上的
像 素 位 置 为 (x,round(y)) 。 设 当 前 点 为 (xi,yi),则下一个像素xi+1 = xi +1,则 yi+1 =k xi+1 +B =k(xi+1)+B=(k xi +B)+k = yi +k 即当x每递增1时,y递增斜率k。
即可。
算法举例:
设直线的起点为(0,0),终点为(5, 3),按Bresenham 算法计算并确定个 像素点位置。
计算dx=5,dy=3,k=3/5=0.6,误差e=-0.5; x=0,y=0
(1) i=0: 输出像素(0,0)
x=1,e=e+k=-0.5+0.6=0.1>0, 则 有
y=y+1=1,e=e-1=0.1-1=-09
其中,a=y0-y1,b=x1-x0,c=x0y1-x1y0。
对于直线中的点,则有F(x,y)=0;对于直 线上方的点,则有F(x,y)>0;对于直线下 方的点,则有F(x,y)<0。
• 判断中点M在Q的上方,还是 在下方,只要将中点坐标 M(xi+1,yi+0.5) 代 入 F(x,y) 方 程 中,并判断它的符号。构造判 别式