《(2.3)--第3章 基本图形的扫描转换.ppt》由会员分享,可在线阅读,更多相关《(2.3)--第3章 基本图形的扫描转换.ppt(60页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章第三章扫描转换的基本概念扫描转换的基本概念绘制像素点函数绘制像素点函数SetPixel的用法的用法直线圆和椭圆的中点直线圆和椭圆的中点Bresenham原原理理直线反走样原理直线反走样原理n3.1 3.1 直线的扫描转换直线的扫描转换n3.2 3.2 圆的扫描转换圆的扫描转换n3.3 3.3 椭圆的扫描转换椭圆的扫描转换n3.4 3.4 反走样算法反走样算法n3.6 3.6 本章小结本章小结n3.7 3.7 习题习题3.1 3.1 直线的扫描转换直线的扫描转换n 3.1.1 3.1.1 算法原理算法原理n 3.1.2 3.1.2 构造中点偏差判别式构造中点偏差判别式n 3.1.3 3.1
2、.3 递推公式递推公式n 直线的中点直线的中点BresenhamBresenham算法的原理:每次算法的原理:每次在主位移方向上走一步,另一个方向上走不在主位移方向上走一步,另一个方向上走不走步取决于中点偏差判别式的值。走步取决于中点偏差判别式的值。n 给定理想直线的起点坐标为给定理想直线的起点坐标为P0P0(x0 x0,y0y0),终点坐标为),终点坐标为P1P1(x1x1,y1y1),则直线的),则直线的隐函数方程为:隐函数方程为:3.1.1 3.1.1 算法原理算法原理其中,直线的斜率:其中,直线的斜率:直线水平方向位移直线水平方向位移 :直线垂直方向位移直线垂直方向位移 :(3-13-
3、1)理想直线将平面划分成三个区域:理想直线将平面划分成三个区域:对于直线上的点,对于直线上的点,F(xF(x,y)y)0 0;对于直线上方的点,对于直线上方的点,F F(x x,y y)0 0;对于直线下方的点,对于直线下方的点,F F(x x,y y)0 0。假设直线的斜率为假设直线的斜率为0k10k1,则,则 ,所以确定所以确定x x方向为主位移方向。方向为主位移方向。按照按照BresenhamBresenham原理,原理,x x方向上每次方向上每次加加1 1,y y方向上加不加方向上加不加1 1取决于中点偏差判取决于中点偏差判别式的值。别式的值。假定直线的当前点是假定直线的当前点是 ,沿
4、主位移沿主位移x x方向走一步,下一点只能方向走一步,下一点只能在在 和和 两点中选取。两点中选取。和和 的中点为的中点为 ,如图,如图3-23-2所示。显然,若中点所示。显然,若中点M M在在理想直线的下方,则理想直线的下方,则 点距离直点距离直线近,点亮线近,点亮 ;否则点亮;否则点亮 。F F(x x,y y)00F F(x x,y y)=0=0F F(x x,y y)00直线中点直线中点BresenhamBresenham算法原理算法原理3.1.2 3.1.2 构造中点偏差判别式构造中点偏差判别式 从P(xi,yi)点走第一步后,为了进行下一像素点的选取,需将Pu和Pd的中点M(x i
5、1,y i0.5)代入隐函数方程,构造中点偏差判别式d。(3-2)当当d0d0d0时,中点时,中点M M在直线的上方,在直线的上方,P Pd d点离点离直线距离近,下一像素点应点亮直线距离近,下一像素点应点亮P Pd d,即即y y方向上不走步;方向上不走步;当当d d0 0时,中点时,中点M M在直线上,在直线上,P Pu u、P Pd d与与直线的距离相等,点亮直线的距离相等,点亮P Pu u或或P Pd d均可,均可,约定取约定取P Pd d。(3-33-3)3.1.3 3.1.3 递推公式递推公式M(x i2,y i1.5)M(x i1,y i0.5)P(xi,yi)M(x i1,y
6、i0.5)M(x i2,y i0.5)P(xi,yi)中点偏差判别式的递推中点偏差判别式的递推d0 d0 1.1.中点偏差判别式的递推公式中点偏差判别式的递推公式 在主位移在主位移x x方向上已走一步的情况下,现方向上已走一步的情况下,现在考虑沿主位移方向再走一步,应该选择哪个中在考虑沿主位移方向再走一步,应该选择哪个中点代入中点偏差判别式以决定下一步该点亮的像点代入中点偏差判别式以决定下一步该点亮的像素,如图素,如图3-33-3所示,分两种情况讨论。所示,分两种情况讨论。(1)(1)当当d0d00F F(x x,y y)=0=0F F(x x,y y)003.2.1 3.2.1 算法原理算法
7、原理 圆心在原点、半径为圆心在原点、半径为R R的圆方程的隐的圆方程的隐函数表达式为:函数表达式为:圆将平面划分成三个区域:对于圆上圆将平面划分成三个区域:对于圆上的点,的点,F(xF(x,y)y)0 0;对于圆外的点,;对于圆外的点,F F(x x,y y)0 0;对于圆内的点,;对于圆内的点,F F(x x,y y)0 0。(3-73-7)事实上,考虑到圆在第一象限内的对称性,事实上,考虑到圆在第一象限内的对称性,本算法可以进一步简化。本算法可以进一步简化。因为因为ACAC段圆弧和段圆弧和CBCB段圆弧以对称轴段圆弧以对称轴x xy y完完全对称,如图全对称,如图3-63-6所示,所以可以
8、用四条对称所示,所以可以用四条对称轴轴x x0 0,y y0 0,x x y,xy,xy y把圆分成把圆分成8 8等份。等份。只要绘制出第一象限内的只要绘制出第一象限内的1/81/8圆弧圆弧,根,根据对称性就可绘制出整圆,这称为八分法画圆据对称性就可绘制出整圆,这称为八分法画圆算法。假定第一象限内的任意点为算法。假定第一象限内的任意点为P P(x,yx,y),),可以顺时针确定另外可以顺时针确定另外7 7个点:个点:P P(y y,x x)P P(y y,x x),P,P(x,x,y y),P,P(x x,y y),),P P(y y,x x),),P P(y y,x x),),P P(x x
9、,y y)。)。P P(-y-y,x x)P P(-y-y,-x-x)x=-yx=-yP P(-x-x,-y-y)P P(x x,-y-y)P P(y y,-x-x)P P(y y,x x)P P(x x,y y)P P(-x-x,y y)x=yx=yx=0 x=0y=0y=0圆的对称性圆的对称性 本算法只考虑图本算法只考虑图3-63-6所示阴影部分的所示阴影部分的4545圆弧,即第一象限内圆弧,即第一象限内 的的1/81/8圆弧。圆弧。(0 0,R R)到()到(中点中点BresenhamBresenham算法的原理简化为:算法的原理简化为:x x方向上方向上每次加每次加1 1,y y方向上
10、减不减方向上减不减1 1取决于中点偏差取决于中点偏差判别式的值。判别式的值。)顺时针确定最佳逼近于该段圆弧的像素点集。)顺时针确定最佳逼近于该段圆弧的像素点集。此时中点此时中点BresenhamBresenham算法要从算法要从 假定圆当前点是假定圆当前点是P P(x xi i,y yi i),下一点只下一点只能在能在P Pu u(x x i i1 1,y y i i)和和P Pd d(x x i i1 1,y yi i1 1)中选取,如图中选取,如图3-73-7所示。所示。P Pu u和和P Pd d的中点为的中点为M M(x x i i1 1,y y i i0.50.5)显然,若显然,若M
11、 M点在理想圆弧的下点在理想圆弧的下方,则方,则P Pu u点离圆弧近,点亮点离圆弧近,点亮P Pu u;否则应点亮;否则应点亮P Pd d。PuPu(x ix i1 1,y iy i)y yP P(x xi i,y yi i)M M(x x i+1 i+1,y y i i0.50.5)P Pd d(x x i i1 1,y yi i1 1)圆中点圆中点BresenhamBresenham算法原理算法原理3.2.2 3.2.2 构造中点偏差判别式构造中点偏差判别式 从从P P(x xi i,y yi i)开始,为了进行下一像素点)开始,为了进行下一像素点的选取,需将的选取,需将PuPu和和Pd
12、Pd的中点的中点M M(x ix i1 1,y iy i0.50.5)代入隐函数,构造中点偏差判别式:代入隐函数,构造中点偏差判别式:(3-93-9)当当d0d0d0时,中点时,中点M M在圆外,下一在圆外,下一像素点应点亮像素点应点亮P Pd d,即,即y y方向退一步;方向退一步;当当d d0 0时,中时,中点点M M在圆上,在圆上,P Pu u、P Pd d和圆的距离相等,点亮和圆的距离相等,点亮P Pu u或或P Pd d均可,约定取均可,约定取P Pd d。因此因此,(3-103-10)3.2.3 3.2.3 递推公式递推公式1.1.中点偏差判别式的递推公式中点偏差判别式的递推公式
13、现在如果考虑主位移方向再走现在如果考虑主位移方向再走一步,应该选择哪个中点代入中点一步,应该选择哪个中点代入中点偏差判别式以决定下一步应该点亮偏差判别式以决定下一步应该点亮的像素,分两种情况讨论。的像素,分两种情况讨论。当当d0d0时,下一步的中点坐标为:时,下一步的中点坐标为:M M(x ix i2 2,y iy i0.50.5)。)。所以下一步中点偏差判别式为:所以下一步中点偏差判别式为:(3-113-11)当当d0d0时,下一步的中点坐标为:时,下一步的中点坐标为:M M(x ix i2 2,y iy i1.51.5)。)。所以下一步中点偏差判别式为:所以下一步中点偏差判别式为:(3-1
14、23-12)P(xi,yi)M(x i1,y i0.5)M(x i+2,y i0.5)M(x i1,y i0.5)M(x i2,y i1.5)d0d00F F(x x,y y)=0=0F F(x x,y y)00理想椭圆理想椭圆图图3-9 3-9 椭圆的扫描转换椭圆的扫描转换3.3.1 3.3.1 原理原理 圆心在原点、长半轴为圆心在原点、长半轴为a a、短半轴为、短半轴为b b的椭圆方程的隐函数表达式为:的椭圆方程的隐函数表达式为:(3-14)椭圆将平面划分成三个区域:对于椭椭圆将平面划分成三个区域:对于椭圆上的点,圆上的点,F(xF(x,y)y)0 0;对于椭圆外的点,;对于椭圆外的点,F
15、 F(x x,y y)0 0;对于椭圆内的点,;对于椭圆内的点,F F(x x,y y)0 0,如图,如图3-93-9所示。所示。考虑到椭圆对称性,可以用对称轴考虑到椭圆对称性,可以用对称轴x0,y0,把椭圆分成,把椭圆分成4等份。只要绘制出第一象限等份。只要绘制出第一象限内内1/4椭圆弧,如图椭圆弧,如图3-10的阴影部分的阴影部分和和所所示,根据对称性就可绘制出整个椭圆,这称为示,根据对称性就可绘制出整个椭圆,这称为四分法绘制椭圆算法。已知第一象限内的点四分法绘制椭圆算法。已知第一象限内的点P(x,y),可以顺时针得到另外可以顺时针得到另外3个对称点:个对称点:P(x,y),P(x,y),
16、P(x,y)。P(x,y)P(x,y)P(x,y)yP P(x x,y y)图图3-10 3-10 椭圆的对称性椭圆的对称性 在处理第一象限的在处理第一象限的1/41/4椭圆弧时,椭圆弧时,进一步以法矢量两个分量相等的点把进一步以法矢量两个分量相等的点把它分为两部分,上半部分它分为两部分,上半部分和下半部和下半部分分。该椭圆上一点。该椭圆上一点P P(x x,y y)处的法)处的法矢量为:矢量为:(3-153-15)式中,式中,i i和和j j是沿是沿x x轴向和沿轴向和沿y y轴向的单位矢量。轴向的单位矢量。在图在图3-113-11所示的部分所示的部分的的ACAC椭圆弧段,法矢量椭圆弧段,法
17、矢量的的x x向分量小于向分量小于y y向分量,斜率向分量,斜率k k处处满足处处满足|k|k|1 1,|x|x|y|y|,所以,所以x x方向为主位移方向;在方向为主位移方向;在C C点,法矢量的点,法矢量的x x向分量等于向分量等于y y向分量,斜率向分量,斜率k k满足满足k k1 1,|x|x|y|y|;在部分;在部分的的CBCB椭圆弧段,椭圆弧段,法矢量法矢量x x向分量大于向分量大于y y向分量,斜率向分量,斜率k k处处满足处处满足|k|k|1 1,|y|y|x|x|,所以,所以y y方向为主位移方向。方向为主位移方向。A(0,b)B(a,0)y向分量向分量法矢量法矢量 x向分量
18、向分量 C(,)C(,)图图3-11 3-11 椭圆的法矢量椭圆的法矢量 椭圆的中点椭圆的中点BresenhamBresenham算法的原理:在部分算法的原理:在部分:每次在主位移:每次在主位移x x方向上走一步,方向上走一步,y y方向上退不退方向上退不退步取决于中点偏差判别式的值;在部分步取决于中点偏差判别式的值;在部分:每次:每次在主位移方向在主位移方向y y上退一步,上退一步,x x方向上走不走步取决方向上走不走步取决于中点偏差判别式的值。于中点偏差判别式的值。图图3-123-12椭圆中点椭圆中点BresenhamBresenham算法原理算法原理A(0,b)B(a,0)PuPdPlP
19、r 先考虑图先考虑图3-123-12所示部分所示部分的的ACAC段椭段椭圆弧。此时中圆弧。此时中BresenhamBresenham画椭圆算法要从画椭圆算法要从A A(0 0,b b)到()到(,)顺时针确定顺时针确定最佳逼近于该段顺时针确定顺时针确定最佳逼近于该段椭圆弧的像素点集。椭圆弧的像素点集。由于由于x x方向为主位移方向,方向为主位移方向,假定当前假定当前点是点是P P(x xi i,y yi i),),下一步只能在正右方的下一步只能在正右方的像素像素P Pu u(x x i i1 1,y y i i)和右下方的像素和右下方的像素P Pd d(x x i i1 1,y yi i1 1
20、)中选取。中选取。再考虑图再考虑图3-123-12所示部分所示部分CBCB段椭圆弧。此段椭圆弧。此时中时中BresenhamBresenham画椭圆算法要从画椭圆算法要从C C(,),)到到B(a,0)顺时针确顺时针确定最佳逼近于该段椭圆弧像素点集。定最佳逼近于该段椭圆弧像素点集。由于由于y y方向为主位移方向,方向为主位移方向,假定当前点假定当前点是是P(xi i,yi i),下一步只能在正下方像素下一步只能在正下方像素Pl l(x i i,y i i1)和右下方的像素和右下方的像素PrPr(x ix i1 1,yiyi1 1)中选取。中选取。3.3.2 3.3.2 构造上半部分构造上半部分
21、中点偏中点偏差判别式差判别式 在上半部分在上半部分,x x方向每次加方向每次加1 1,y y方向上减不方向上减不减减1 1取决于中点偏差判别式的值。取决于中点偏差判别式的值。从从P P(x xi i,y yi i)走第走第一步,为了选取下一像素点的,需将一步,为了选取下一像素点的,需将P Pu u(x x i i1 1,y y i i)和)和P Pd d(x x i i1 1,y yi i1 1)的中点的中点M M(x x i i1 1,y y i i0.50.5)代入隐函数,构造中点偏差判别式代入隐函数,构造中点偏差判别式:当当d10d10d0时时,中中点点M M在在椭椭圆圆外外,下下一一像
22、像素素点点应应点点亮亮P Pd d,即即y y方方向向退退一一步步;当当d d0 0时时,中中点点M M在在椭椭圆圆上上,P Pu u、P Pd d和和椭椭圆圆的的距距离离相相等等,点点亮亮P Pu u或或P Pd d均可,约定取均可,约定取P Pd d,如图,如图3-133-13所示。所示。(3-16)P(xi,yi)Pu(x i1,y i)M(x i+1,y i-0.5)Pd(x i1,yi1)图图3-13 3-13 上半部分像素点的选取上半部分像素点的选取 因此因此,(3-173-17)3.3.3 上半部分的递推公式P(xi,yi)M(x i1,y i0.5)M(x i2,y i0.5)
23、P(xi,yi)M(x i1,y i0.5)M(x i2,y i1.5)d10 d10 图图3-14 3-14 上半部分中点偏差判别式的递推上半部分中点偏差判别式的递推 图图3-133-13中,中,为了能够继续判断椭圆上的每个点,为了能够继续判断椭圆上的每个点,需要给出中点偏差判别式需要给出中点偏差判别式d1d1的递推公式和初始值。的递推公式和初始值。1.1.中点偏差判别式的递推公式中点偏差判别式的递推公式 现在如果考虑主位移方向再走一步,现在如果考虑主位移方向再走一步,应该选取哪个中点代入应该选取哪个中点代入中点偏差判别式中点偏差判别式以决定应该点亮的像素,如图以决定应该点亮的像素,如图3-
24、14所示,所示,分两种情况讨论。分两种情况讨论。当当d10时,下一步的中点坐标为:时,下一步的中点坐标为:M(x i2,y i-0.5)。所以下一步中。所以下一步中点偏差判别式为:点偏差判别式为:(3-18)当当d10d10时,下一步的中点坐标为:时,下一步的中点坐标为:M M(x ix i2 2,y iy i1.51.5)。所以下一步中)。所以下一步中点偏差判别式为:点偏差判别式为:(3-19)2.2.中点偏差判别式中点偏差判别式d1d1的初值的初值 上半部分椭圆的起点为上半部分椭圆的起点为A A(0 0,b b),因此,),因此,第一个中点是(第一个中点是(1 1,b b0.50.5),对
25、应的),对应的d1d1的的初值为:初值为:(3-20)(3-21)yxP(xi,yi)Pr(x i1,yi1)图图3-15 3-15 下半部分像素点的选取下半部分像素点的选取3.3.4 3.3.4 构造构造中点偏差判中点偏差判别式别式构造中点偏差判别式构造中点偏差判别式:Pl(x i,y i1)当当d20d20d20时时,中中点点M M在在椭椭圆圆外外,下下一一像像素素点点应应点点亮亮P Pl l,即即x x方方向向上上不不走走步步;当当d2d20 0时时,中中点点M M在在椭椭圆圆上上,P Pl l、P Pr r和和椭椭圆圆的的距距离离相相等等,点点亮亮P Pl l或或P Pr r均均可可,
26、约约定定取取P Pl l,如图,如图3-153-15所示。所示。因此因此,(3-22)3.3.5 3.3.5 下半部分下半部分的递推公式的递推公式1.1.中点偏差判别式的递推公式中点偏差判别式的递推公式 现在如果考虑主位移方向上再走一步,应该现在如果考虑主位移方向上再走一步,应该选择哪个中点代入中点偏差判别式以决定应该点选择哪个中点代入中点偏差判别式以决定应该点亮的像素,如图亮的像素,如图3-163-16所示,分两种情况讨论。所示,分两种情况讨论。P(xi,yi)M(x i0.5,y i1)M(x i1.5,y i2)d20 P(xi,yi)M(x i0.5,y i1)M(x i0.5,y i
27、2)d20 图图3-16 3-16 下半部分中点偏差判别式的递推下半部分中点偏差判别式的递推 当当d20d20时,下一步的中点坐标为:时,下一步的中点坐标为:M M(x x i i1.51.5,y y i i2 2)。所以下一步中点偏差判别式为:)。所以下一步中点偏差判别式为:(3-23)当当d20d20时,下一步的中点坐标为:时,下一步的中点坐标为:M M(x x i i0.50.5,y y i i2 2)。所以下一步中点偏差判别式为:)。所以下一步中点偏差判别式为:(3-24)y y向分量为:向分量为:则对于则对于上半部分椭圆上一点任意上半部分椭圆上一点任意P P(x xi i,y yi
28、i)如果在其当前中点如果在其当前中点M M(x xi i1 1,y yi i0.50.5)处,)处,满足满足x x向分量小于向分量小于y y 向分量:向分量:2.2.中点偏差判别式中点偏差判别式d d2 2的初值的初值 由图由图3-113-11知道,在上半部分知道,在上半部分,法,法矢矢量量的的x x向分量小于向分量小于y y向分量;在向分量;在C C点,法点,法矢量矢量的的x x向分量等于向分量等于y y向分量;在下半部分向分量;在下半部分,法,法矢量矢量的的x x向分量大于向分量大于y y向分量。由公式向分量。由公式3-153-15知知道:道:x x向分量为:向分量为:(3-253-25)
29、假定图假定图3-173-17中中P P(x xi i,y yi i)点是椭)点是椭圆上半部分圆上半部分的最后一个像素,的最后一个像素,MM(x xi i1 1,y yi i0.50.5)是用于判断点亮)是用于判断点亮P Pu u和和P Pd d像素的中点。像素的中点。由于下一像素转入了下半部分由于下一像素转入了下半部分,所以其中点改为判断,所以其中点改为判断P Pl l和和P Pr r的中点的中点MM(x xi i0.50.5,y yi i1 1),所以下半部分),所以下半部分的初值的初值d d2020为:为:(3-263-26)P(xi,yi)Pu(xi1,yi)Pl(xi,yi1)M(xi
30、1,yi0.5)Pd(xi1,yi1)=Pr(xi1,yi1)图图3-17 3-17 下半部分的初值下半部分的初值3.43.4 反走样算法反走样算法 考虑将偏差考虑将偏差e e作为加权参数,同时用上下(或作为加权参数,同时用上下(或左右)两个像素点的颜色来表示交点左右)两个像素点的颜色来表示交点f f的颜色。的颜色。像素像素a a的颜色为的颜色为c1c1RGBRGB(e e255255,e e255255,e e255255),像素),像素b b的颜色为的颜色为c2 c2 RGBRGB(1 1e e)255255,(,(1 1e e)255255,(,(1 1e e)255255),),两个像
31、素点颜色的各个相应分量级别之和等于两个像素点颜色的各个相应分量级别之和等于255255。当偏差当偏差e e越小时,越小时,c1c1的分量的分量e e255255值越小,值越小,颜色越暗,同时颜色越暗,同时c2c2的分量(的分量(1 1e e)255255值越大,值越大,颜色越亮;反之亦然。用两个像素来表示理想线颜色越亮;反之亦然。用两个像素来表示理想线条上的一个点,并依据两个像素与理想直线的距条上的一个点,并依据两个像素与理想直线的距离而调节其灰度级别,所绘制的线条可以达到视离而调节其灰度级别,所绘制的线条可以达到视觉上消除阶梯的效果。觉上消除阶梯的效果。P P6 6P P4 4P P2 2P
32、 P3 3P P1 1P P5 51 12 23 3距离理想直线距离理想直线0.80.8个像素远的个像素远的像素灰度为像素灰度为8080距离理想直线距离理想直线0.20.2个像素远个像素远的像素灰度为的像素灰度为2020距离理想直线距离理想直线0.450.45个像素远的像素灰个像素远的像素灰度为度为4545距离理想直线距离理想直线0.10.1个像素远的像素个像素远的像素灰度为灰度为1010距离理想直线距离理想直线0.550.55个像素远的个像素远的像素灰度为像素灰度为5555距离理想直线距离理想直线0.90.9个像素远的像素个像素远的像素灰度为灰度为9090A AB B3.6 3.6 本章小结
33、本章小结 本章主要讲解了直线、圆和椭圆的中点本章主要讲解了直线、圆和椭圆的中点BresenhamBresenham算法原理以及直线的反走样技术。直线、圆算法原理以及直线的反走样技术。直线、圆和椭圆作为图形基本图元,其生成算法的优劣对整个图和椭圆作为图形基本图元,其生成算法的优劣对整个图形系统的效率至关重要。在像素级生成算法中,中点形系统的效率至关重要。在像素级生成算法中,中点BresenhamBresenham 算法避免了复杂运算,使用了最小的计算量,算法避免了复杂运算,使用了最小的计算量,使单点基本图形生成算法已无优化的余地,已经成为使使单点基本图形生成算法已无优化的余地,已经成为使用最广泛
34、的扫描转换算法。走样是直线光栅化扫描转换用最广泛的扫描转换算法。走样是直线光栅化扫描转换的必然结果,只能减轻,不可避免,如何设计直线的反的必然结果,只能减轻,不可避免,如何设计直线的反走样算法是计算机图形学的前沿研究课题。走样算法是计算机图形学的前沿研究课题。3.7 3.7 习题习题1.1.计算起点坐标为(计算起点坐标为(0,00,0),终点坐标),终点坐标(12,912,9)直线的中点)直线的中点BresenhamBresenham算法的每一步算法的每一步坐标值以及中点偏差判别式坐标值以及中点偏差判别式d d的值,填入表的值,填入表3-13-1中,并用黑色点亮图中,并用黑色点亮图3-293-
35、29中的直线像素。中的直线像素。图图3-293-29像素点阵像素点阵 表表3-1 3-1 x,yx,y和和d d的值的值xydxyd00-0.2575-0.511086-0.2521-0.7597032-0.5107-0.7543-0.25118-0.5540129-0.2564-0.752.2.给定直线给定直线的起点的起点坐标为坐标为P P0 0(x x0 0,y y0 0)、终点坐标为终点坐标为P P1 1(x x1 1,y y1 1),容易计算出直),容易计算出直线的斜率线的斜率k k。假设。假设0 0k k1 1且且x x0 0 x x1 1,则,则x x方方向为主位移方向,绘制直线的
36、递推公式为:向为主位移方向,绘制直线的递推公式为:这称为数值微分法(这称为数值微分法(Digital Digital Differential AnalyzerDifferential Analyzer,DDADDA),请使),请使用用MFCMFC编程实现编程实现DDADDA算法并在屏幕上输出算法并在屏幕上输出直线的斜率。直线的斜率。3.3.将中点将中点BresenhamBresenham算法推广到绘制任意算法推广到绘制任意斜率的直线,对边界像素的处理原则是斜率的直线,对边界像素的处理原则是“起点闭区间、终点开区间起点闭区间、终点开区间”,即要求,即要求所绘直线达到所绘直线达到VC+VC+的的
37、MoveToMoveTo()()和和LineToLineTo()()函数的绘制效果。使用对话框输入直函数的绘制效果。使用对话框输入直线的起点和终点坐标,试以屏幕中心为线的起点和终点坐标,试以屏幕中心为二维坐标系原点,绘制任意斜率的直线。二维坐标系原点,绘制任意斜率的直线。4.4.使用对话框输入直线的起点和终点坐使用对话框输入直线的起点和终点坐标,以屏幕中心为二维坐标系原点,绘标,以屏幕中心为二维坐标系原点,绘制任意斜率的反走样直线。制任意斜率的反走样直线。5.5.以屏幕中心为二维坐标系原点,使用以屏幕中心为二维坐标系原点,使用距离加权反走样算法绘制反走样圆。距离加权反走样算法绘制反走样圆。6.
38、6.以屏幕中心为二维坐标系原点,使用以屏幕中心为二维坐标系原点,使用距离加权反走样算法绘制反走样椭圆。距离加权反走样算法绘制反走样椭圆。7.*7.*在屏幕上绘制在屏幕上绘制40403030的网格(模拟屏的网格(模拟屏幕纵横比为幕纵横比为4:34:3),每个网格为边长为),每个网格为边长为2020个像个像素的正方形。设定虚拟网格坐标系的原点为左素的正方形。设定虚拟网格坐标系的原点为左上角第一个网格中点,虚拟网格坐标系的上角第一个网格中点,虚拟网格坐标系的x x轴轴水平向右,水平向右,y y轴垂直向下。根据输入对话框给轴垂直向下。根据输入对话框给定的起点坐标和终点坐标,请使用定的起点坐标和终点坐标
39、,请使用0k10k1的的中点中点BresenhamBresenham算法,点亮每个代表像素的网算法,点亮每个代表像素的网格正方形来实现直线的像素级绘制。屏幕网格格正方形来实现直线的像素级绘制。屏幕网格如图如图3-303-30所示,绘制结果如图所示,绘制结果如图3-313-31所示。所示。图图3-31 直线的像素级绘直线的像素级绘 制效果图制效果图图图3-30 屏幕网格划分屏幕网格划分8.8.使用对话框输入直线的起点和终点坐标,以使用对话框输入直线的起点和终点坐标,以屏幕中心为二维坐标系原点,给定直线的起点屏幕中心为二维坐标系原点,给定直线的起点颜色(如红色),终点颜色(如蓝色)。请使颜色(如红色),终点颜色(如蓝色)。请使用中点用中点BresenhamBresenham算法绘制任意斜率的颜色渐算法绘制任意斜率的颜色渐变直线,如图变直线,如图3-323-32所示。所示。图图3-32 3-32 颜色渐变直线效果图颜色渐变直线效果图9.*9.*使用使用GetCurrentTimeGetCurrentTime()()函数读取系统函数读取系统时间,对时钟指针进行反走样处理,绘时间,对时钟指针进行反走样处理,绘制反走样时钟。图制反走样时钟。图3-333-33的左侧为走样时的左侧为走样时钟,右侧为反走样时钟。钟,右侧为反走样时钟。
限制150内