第1次作业答案
- 格式:doc
- 大小:263.50 KB
- 文档页数:19
习题3.推广本章第一节给出的产生线段的整数Bresenham算法,去掉0<=m<=1和x1 解答: Bresenham画线算法使用实际直线上点与可选像素点之间的距离差作为判别式。假设要绘制的空间任一直线段的两个端点为(x1, y1)和(x2, y2),如果保证x1≤x2,则Bresenham画线算法的处理分为图3.1中所示的四种情况。 第(1)种情况,直线的斜率m处于0和1之间,当x增量为1像素时,y增量在0与1之间,此时下一个可选像素点为P1(x p+1, y p)或P2(x p+1,y p+1)。此时在x = x p +1处直线上点的y值是y = m(x p + 1) + b,该点到P1(x p+1, y p)和P2(x p+1,y p+1)的距离分别为d1和d2:d1 = y – y p = m(x p + 1) + b - y p d2 = (y p + 1) – y = (y p + 1) – m(x p + 1) – b 这两个距离的差为: d = d1– d2 = 2m(x p + 1) – 2y p + 2b – 1 若d>0,则下一个像素点取P2(x p+1,y p+1);若d<0,则下一个像素点取P1(x p+1, y p);若d=0,则下一个像素点可取这两个像素点中任意一个。为了简便d的符号的计算,可引入一个新的判别量p p: p p = Δxd = Δx(d1– d2) = 2Δy·x p– 2Δx·y p + c 其中,Δx = x2– x1,Δy = y2– y1,c = 2·Δy +Δx(2b – 1)。因为这里Δx>0,故p p与d 同号,可以作为判别量。下面看如何从p p计算p p+1。将上式中的p换成p+1,有:p p+1 = 2Δy·x p+1– 2Δx·y p+1 + c 因为x p+1 = x p + 1,可知: p p+1– p p = 2Δy – 2Δx (y p+1– y p) 当p<0时,取P1(x p+1, y p),此时y p+1 = y p,所以p p+1 = p p + 2Δy;否则,取P2(x p+1,y p+1),此时y p+1 = y p + 1,所以p p+1 = p p + 2(Δy –Δx)。此时还需要看判别量p1的初始值,因为线段上第一个像素点可以取起点(x1, y1),所以有: p1 = 2Δy·x1 - 2Δx·y1 + 2·Δy +Δx(2b – 1) 因为y1 = (Δy /Δx)x1 + b,可计算出: p1 = 2Δy –Δx 其它三种情况都可以用此方法来完成处理。 第(2)种情况,直线的斜率m大于1,当y增量为1像素时,x增量在0与1之间,此时下一个可选像素点为P1(x p, y p+1)或P2(x p+1,y p+1)。在y = y p +1处直线上点的x值是x = (y p + 1 – b)/m,该点到P1(x p+1, y p)和P2(x p+1,y p+1)的距离分别为d1和d2: d1 = x – x p = (y p + 1 – b)/m - x p d2 = (x p + 1) – x = (x p + 1) – (y p + 1 – b)/m 则这两个距离的差为: d = d1– d2 = 2(y p + 1 – b)/m – 2x p– 1 因为Δy>0,为简便运算引入新的判别量p p: p p = Δyd = Δy(d1– d2) = 2Δx·y p– 2Δy·x p + c 其中,Δx = x2– x1,Δy = y2– y1,c = 2·Δx(1 – b) –Δy。下面看如何从p p计算p p+1。将上式中的p换成p+1,则: p p+1 = 2Δx·y p+1– 2Δy·x p+1 + c 因为y p+1 = y p + 1,可知: p p+1– p p = 2Δx – 2Δy (x p+1– x p) 当p<0时,取P1(x p, y p+1),此时x p+1 = x p,所以p p+1 = p p + 2Δx;否则,取P2(x p+1,y p+1),此时x p+1 = x p + 1,所以p p+1 = p p + 2(Δx –Δy)。计算判别量p1的初始值时,因为线段上第一个像素点可以取起点(x1, y1),所以有: p1 = 2Δx·y1 - 2Δy·x1 + 2·Δx(1 – b) –Δy 因为y1 = (Δy /Δx)x1 + b,可计算出: p1 = 2Δx –Δy 第(3)种情况,直线的斜率m处于0和-1之间,当x增量为1像素时,y减量在0与1之间,此时下一个可选像素点为P1(x p+1, y p)或P2(x p+1,y p–1)。在x = x p+1处直线上点的y 值是y = m(x p + 1) + b,该点到P1(x p+1, y p)和P2(x p+1,y p–1)的距离分别为d1和d2:d1 = y p– y = y p– m(x p + 1) – b d2 = y – (y p - 1) = m(x p + 1) + b – (y p - 1) 则这两个距离的差为: d = d1– d2 = 2y p– 2m(x p + 1) – 2b + 1 因为Δx>0,为简便运算引入新的判别量p p: p p = Δxd = Δx(d1– d2) = 2Δx·y p– 2Δy·x p + c 其中,Δx = x2– x1,Δy = y2– y1,c =Δx(1 – 2b) – 2·Δy。下面看如何从p p计算p p+1。将上式中的p换成p+1,有: p p+1 = 2Δx·y p+1– 2Δy·x p+1 + c 因为x p+1 = x p + 1,可知: p p+1– p p = 2Δx (y p+1– y p) – 2Δy 当p<0时,取P1(x p+1, y p),此时y p+1 = y p,所以p p+1 = p p– 2Δy;否则,取P2(x p+1,y p–1),此时y p+1 = y p– 1,所以p p+1 = p p– 2(Δx + Δy)。计算判别量p1的初始值时,因为线段上第一个像素点可以取起点(x1, y1),所以有: p1 = 2Δx·y1 - 2Δy·x1 + Δx(1 – 2b) – 2·Δy 因为y1 = (Δy /Δx)x1 + b,可计算出: p1 = Δx – 2Δy 第(4)种情况,直线的斜率m小于-1,当y减量为1像素时,x增量在0与1之间,此时