中点画线法 判别式的计算:注意到d是xp,yn的线性函数,可采用增量计算,提 高运算效率: 若当前象素处于d>=0情况,则取正右方象素P1(x+1,y),要判下 个象素位置,应计算 d1=F(xn+2,yn+0.5)=a(xn+2)+b(yn+0.5)=d+a;增量为a 若d<0时,则取右上方象素P2( +1)。要判断再下一象素 则要计算 d2=F(xn+2,yn+1.5)=a(xn+2)+b(yn+1.5)+c=d+a+b;增量为a+b 画线从(x,y)开始,d的初值d=F(x0+1,yo+0.5)=F(x )+a+0.5b因F(x,y0)=0,则d=a+0.5b。 由于我们使用的只是d的符号,而且d的增量都是整数,只是初始值 包含小数。因此,我们可以用2d代替d来摆脱小数,写出仅包含整数 运算的算法
中点画线法 判别式d的计算:注意到d是xp , yp的线性函数,可采用增量计算,提 高运算效率: 若当前象素处于d>=0情况,则取正右方象素P1(xp +1, yp),要判下 一个象素位置,应计算 d1 =F(xp +2, yp +0.5)=a(xp +2)+b(yp +0.5)=d+a; 增量为a 若d<0时,则取右上方象素P2(xp +1, yp +1)。要判断再下一象素, 则要计算 d2 = F(xp +2, yp +1.5)=a(xp +2)+b(yp +1.5)+c=d+a+b ;增量为a+b 画线从(x0 , y0 )开始,d的初值 d0 =F(x0 +1, y0 +0.5)=F(x0 , y0 )+a+0.5b 因F(x0 , y0 )=0,则d0 =a+0.5b。 由于我们使用的只是d的符号,而且d的增量都是整数,只是初始值 包含小数。因此,我们可以用2d代替d来摆脱小数,写出仅包含整数 运算的算法
中点画线法 算法程序 void MidpointLine (int xo, int yo, int x,, int yu, int color i int a, b, d d, yo y1 =x1-X Thile (x<x,) d=2*a+b; if(d<0){x++,y+, =d2;} 2*a ese{x++,d+=d1;} d2=2*(a+b) Putpixel olor) 1/* while * / mid PointLine */ Putpixel(x, y, color
中点画线法 算法程序 void MidpointLine (int x0 ,int y0 ,int x1 , int y1 ,int color) { int a, b, d1 , d2 , d, x, y; a=y0 -y1; b=x1 -x0; d=2*a+b; d1 =2*a; d2 =2*(a+b); x=x0; y=y0 ; Putpixel(x, y, color); while (x<x1 ) { if (d<0) {x++, y++, d+=d2 ; } else {x++, d+=d1 ;} Putpixel (x, y, color); } /* while */ } /* mid PointLine */
中点画线法 举例用中点画线方法扫描转换连接两点P0(0,0)和P1(5,2)的直 线段。a=y0y1=2;b=x1-x0=5;d0=2*a+b=1;d1=2*a 4;d2=2*(a+b)=6, 3 001 10-3dl 3d2 31 1d1 012345
中点画线法 举例 用中点画线方法扫描转换连接两点P0(0,0)和P1(5,2)的直 线段。a=y0-y1=-2; b=x1-x0=5; d0=2*a+b=1;d1=2*a=- 4;d2=2*(a+b)=6 , X y d 0 0 1 1 0 -3 d1 2 1 3 d2 3 1 -1 d1 4 2 5 d2
点P0(00)和P(5,2)的直线段 d=F(M)=F(xp+1,yp+0.5)=a(xp+1)+b(yp+0.5)+c a=y0-y1=2:b=x1-x0=5:d0=2*a+b=1:d1=2*a=4;d2=2*(a+b)=6 d>=0取正右方象素为下一个象素位置d(0取右上方象素为下一个象素位置 3 x y d 2 00 10-3 21|3 0 2 3 4 5 ○一为当前象素点●一为下一个象素点 31 ○一为起始点 ○一为终止点 42[5 replay 52
43 Bresenham算法 基本原理:该方法类似于中点法,由误差 项符号决定下一个象素取右边点还是右上 点。是计算机图形学领域使用最广泛的直 线扫描转换算法。 算法原理:过各行各列象 素中心构造一组虚拟网格线。 按直线从起点到终点的顺序计 算直线与各垂直网格线的交点, 然后确定该列象素中与此交点 最近的象素。该算法的巧妙之 处在于采用增量计算,使得对 于每一列,只要检查一个误差 项的符号,就可以确定该列的 所求象素 ri d-
4.3 Bresenham算法 • 基本原理:该方法类似于中点法,由误差 项符号决定下一个象素取右边点还是右上 点。是计算机图形学领域使用最广泛的直 线扫描转换算法。 算法原理:过各行各列象 素中心构造一组虚拟网格线。 按直线从起点到终点的顺序计 算直线与各垂直网格线的交点, 然后确定该列象素中与此交点 最近的象素。该算法的巧妙之 处在于采用增量计算,使得对 于每一列,只要检查一个误差 项的符号,就可以确定该列的 所求象素