第五章基本图形生成算法 5.1直线的扫描转换 lI 5.1.数值微分法DDA法) Void DDAline(int Xo, int yO, int x1, int y1) nt dx, dy, eps1, k float x, y, iNcre,iNcre; dxex1-X0; dy=y1-yO; X=x0; y-yu, If(abs(dx >abs(dy))eps1=abs(dx); else eps1=abs(dy) INcre=(floatdy/float eps ylncre=(floatdy/float eps1 for(k=0; k<=eps1; k++)t putpixel((int)(x+0.5),(int)(y+0.5)); X+=iNcre: y+=iNcre
11 第五章 基本图形生成算法 5.1 直线的扫描转换 5.1.1 数值微分法 (DDA 法 ) Void DDAline(int x0,int y0,int x1,int y1) { int dx,dy,eps1,k; float x,y,xIncre,yIncre; dx=x1 -x0; dy=y1 -y0; x=x0; y=y0; If (abs(dx)>abs(dy)) eps1=abs(dx); else eps1=abs(dy); xIncre=(float)dy/(float)eps1; yIncre=(float)dy/(float)eps1; for (k=0;k<=eps1;k++) { putpixel((int)(x+0.5),(int)(y+0.5)); x+=xIncre; y+=yIncre; } }
第五章基本图形生成算法 5.1直线的扫描转换 5.1.数值微分法DDA法) 特点: 增量算法 直观、易实现 缺点: 浮点运算、取整一一》废时,且不利于硬件实现。 不利于用硬件实现
12 第五章 基本图形生成算法 5.1 直线的扫描转换 5.1.1 数值微分法(DDA法) 特点: 增量算法 直观、易实现 缺点: 浮点运算、取整--》废时,且不利于硬件实现。 不利于用硬件实现
第五章基本图形生成算法 5.1直线的扫描转换 13 5.1.2中点画线法算法 5.1.2中点画线法算法 原理 假定直线斜率K<1,且已确定 Pu(x+1,y+1) 点亮象素点P(Xp,Yp) M为中点,Q为交点 (xt+1,y+1/2 现需确定下一个点亮的象素 P(xi Pa(xi+1, yi 图5-5 Brensemham算法生成直线的原理 显然可得出如下结论:若M在Q的下方,选Pu,否则选Pd
13 第五章 基本图形生成算法 5.1 直线的扫描转换 5.1.2 中点画线法算法 5.1.2 中点画线法算法 原理: 假定直线斜率K<1,且已确定 点亮象素点P(Xp ,Yp ) M为中点,Q为交点 现需确定下一个点亮的象素。 显然可得出如下结论:若M在Q的下方,选Pu,否则选Pd
第五章基本图形生成算法 5.1直线的扫描转换 5.1.2中点画线法算法 算法实现: 假设直线的起点、终点分别为:(X0,Y0),(X1,Y1) 该直线方程可表示为 F(x, y=a*x+b*y+c (1) 其中:a=Y0-Y1,b=X1-X0,c=X0Y1-X1*Y0 当:F(XtYt)=0→(Xt,Yt在直线上 F(XtYt)<0→( XtYt)在直线下方 F(Xt,Yt>0→(XtYt)在直线上方
14 第五章 基本图形生成算法 5.1 直线的扫描转换 5.1.2 中点画线法算法 算法实现: 假设直线的起点、终点分别为:(X0,Y0),(X1,Y1) 该直线方程可表示为: F(x,y)=a*x+b*y+c (1) 其中: a=Y0-Y1, b=X1-X0, c=X0*Y1-X1*Y0 当: F(Xt,Yt) = 0 → (Xt,Yt) 在直线上 F(Xt,Yt) < 0 → (Xt,Yt) 在直线下方 F(Xt,Yt) > 0 → (Xt,Yt) 在直线上方
第五章基本图形生成算法 5.1直线的扫描转换 15 5.1.2中点画线法算法 y F(x,y)=0 F(Xy)=0 F(x,y)>0 F(x,y)>0 F(x,y)<0 图5-4直线将平面分为三个区域
15 第五章 基本图形生成算法 5.1 直线的扫描转换 5.1.2 中点画线法算法 x y F(x,y)>0 F(x,y)=0 F(x,y)<0 图5-4 直线将平面分为三个区域 x y F(x,y)>0 F(x,y)=0 F(x,y)<0