第五章基本图形生成算法 5.1直线的扫描转换 16 5.1.2中点画线法算法 因此:将中点M坐标代入( )式,并判断其符号即 可确定象素点的选取。构 造如下判别式 Pu(xif1, yi+1) d=f(m) y =F(Xp+1,Yp+0.5 a(Xp+1)+b(Yp+0.5)+c , Pa(xi+1, yi) 由上式可看出,d是x,y线 图5-5 Brensemham算法生成直线的原理 性函数,可推导d的增量 公式 +1(a<0) y(d≥0)
16 第五章 基本图形生成算法 5.1 直线的扫描转换 5.1.2 中点画线法算法 因此:将中点M坐标代入( 1)式,并判断其符号即 可确定象素点的选取。构 造如下判别式: d = F(M) =F(Xp+1,Yp+0.5) =a(Xp+1)+b(Yp+0.5)+c 由上式可看出,d是x,y线 性函数,可推导d的增量 公式 + = ( 0) 1 ( 0) y d y d y
第五章基本图形生成算法 5.1直线的扫描转换 17 5.1.2中点画线法算法 误差项的递推 d<0: 当d<0时,取象素Pu,此时 再下一个象素的判别式为 Pu(Xi+2, yi+1. 5) d2=F(Xp+2,Yp+1.5) (xi+1,yi+0.5) a(Xp+2)+b(Yp+1.5)+c (xiyi)pd a(Xp+1)+b(Yp+0.5)+c+a+b d+a+b d<0
17 第五章 基本图形生成算法 5.1 直线的扫描转换 5.1.2 中点画线法算法 当d < 0 时, 取象素Pu,此时 再下一个象素的判别式为: d’= F(Xp+2,Yp+1.5) = a(Xp+2)+b(Yp+1.5)+c = a(Xp+1)+b(Yp+0.5)+c +a +b = d + a + b; 误差项的递推 d<0:
第五章基本图形生成算法 5.1直线的扫描转换 18 5.1.2中点画线法算法 误差项的递推 d>0: 当d>=0时,取象素Pd,此 u 时再下一个象素的判别式 (xi+2yi+0.5) 为: xi+1,yi+0. d’=F(Xp+2,Yp+0.5) (xi,I yi) Pdl a(Xp+2)+b(Yp+0.5)+c a(Xp+1)+b(Yp+0.5)+e+a d>=0 =d+a;
18 第五章 基本图形生成算法 5.1 直线的扫描转换 5.1.2 中点画线法算法 当d>= 0时,取象素Pd,此 时再下一个象素的判别式 为: d’= F(Xp+2,Yp+0.5) = a(Xp+2)+b(Yp+0.5)+c = a(Xp+1)+b(Yp+0.5)+c +a = d + a; 误差项的递推 d≥0:
第五章基本图形生成算法 5.1直线的扫描转换 19 5.1.2中点画线法算法 d的初始值可按下式计算: d0=F(X0+1,Y0+0.5 a(X0+1)+b(Y0+0.5)+c =F(X0,Y0)+a+0.5b =a+05b 由于只用d的符号作判断,为了只包含整数运算 可取2d代替d,这样可得如下中点算法程序
19 第五章 基本图形生成算法 5.1 直线的扫描转换 5.1.2 中点画线法算法 d的初始值可按下式计算: d0 = F(X0+1,Y0+0.5) = a(X0+1)+b(Y0+0.5)+c = F(X0,Y0)+a+0.5b = a+0.5b 由于只用d 的符号作判断,为了只包含整数运算, 可取2d代替 d,这样可得如下中点算法程序:
第五章基本图形生成算法 5.1直线的扫描转换 20 5.1.2中点画线法算法 Midpointline(x0, Y0, xl, y1, color) int X0, Y0, Xl,Y1, Color int a, b, dl, d2, d, x, y; a=Y0-Y1:b=X1-X0: d=a+a+b dl=a+a: d2=a+b+a+b x=X0;y=Y0; drawpixle(x, y, Color); while(x<xIi if(d<0){ d+=d2;
20 第五章 基本图形生成算法 5.1 直线的扫描转换 5.1.2 中点画线法算法 MidpointLine(X0,Y0,X1,Y1,Color) int X0,Y0,X1,Y1,Color; { int a,b,d1,d2,d,x,y; a=Y0 -Y1; b=X1 -X0; d=a+a+b; d1=a+a; d2=a+b+a+b; x=X0; y=Y0; drawpixle(x,y,Color); while(x<X1){ if(d<0){ x++; y++; d+=d2; }