当k>1时,应当让y每步递增1,这时x最多 增加1,然后然后用四舍五入的方法来确 定直线上的像素位置为( round(x)2y)。设 当前点为(xy),则下一个像素y1=y1+1 则 =1/k(y;+1)+T-(1/ky1+T)+1/k X;+1/k 即当y每递增1时,x递增斜率1/k
当|k|>1时,应当让y每步递增1,这时x最多 增加1,然后然后用四舍五入的方法来确 定直线上的像素位置为(round(x),y)。设 当前点为(xi ,yi ),则下一个像素yi+1 =yi +1 ,则 =1/k.(yi+1)+T=(1/k yi +T)+1/k = xi +1/k 即当y每递增1时,x递增斜率1/k
DDA示意图
DDA示意图 ⚫ (xi ,yi) 图4.1 DDA示意图 (xi+1,yi+1)
DDALine(xo, yo, xl, yl, color) int xO, yO, xl, yl, color 实现算法 int length, i float x,y, dx, dy length =abs(x1-XO) if abs(y1-yo)>length length=abs(y1-y0) dx(x1-xO)/length dy=(yl-yo)length Xx0+0.5;y=y0+0.5;∥实现四舍五入 for (i-1; i<=length; i++) putpixel(int(x), int(y), color) XX+dx +d
实现算法 DDALine(x0,y0,x1,y1,color) int x0,y0,x1,y1,color; { int length,i; float x,y,dx,dy; length=abs(x1-x0); if abs(y1-y0)>length length=abs(y1-y0); dx=(x1-x0)/length; dy=(y1-y0)/length; x=x0+0.5; y=y0+0.5; //实现四舍五入 for (i=1;i<=length;i++) { putpixel(int(x),int(y),color); x=x+dx; y=y+dy; } }
4.1.2中点画线法 中点画线算法示意图 M2. M M1 P1
4.1.2 中点画线法 中点画线算法示意图
1原理 设点前点为P(xy),只考虑直线斜率在 0、1之间时,若直线在x方向上增加一个 ●单位,则在y方向上增量只能在0、1之间。 下一个像点只可能是P1(X+1,y)或 P2(x+1,y+1)。 ●在以M表示P1和P2的中点,即 M(x+1,y1+0.5)。 ●又设Q是理想直线与X=x+1的交点, 当M在Q的下方,则取P2为下一个像素; 否则,取P1为下一个像素位置
1.原理: ⚫ 设点前点为P(xi ,yi ),只考虑直线斜率在 ⚫ 0、1之间时,若直线在x方向上增加一个 ⚫ 单位,则在y方向上增量只能在0、1之间。 ⚫ 下 一 个 像 点 只 可 能 是 P1((xi+1,yi ) 或 P2((xi+1,yi+1)。 ⚫ 在 以 M 表 示 P1 和 P2 的中点 , 即 M((xi+1,yi+0.5)。 ⚫ 又设Q是理想直线与x= xi+1的交点, ⚫ 当M在Q的下方,则取P2为下一个像素; 否则,取P1为下一个像素位置