计算机图形学第5章习题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8 8,6.0 (8,6)
习题5.2/P149
②中点Bresenham算法: dx=8,dy=6,2(dx-dy)=4,-2dy=-12,d0=dx-2dy=-4
i (xi yi) 0 (0, 0) 1 (1, 1) 2 (2, 1) 3 (3, 2) 4 (4, 3) 5 (5, 4) 6 (6, 4) 7 (7, 5) di (xi+1,yi+1) di+2(dx-dy) -4 (1,1) -4+4=0 0 (2,1) -12 (3,2) -12+4=-8 -8 (4,3) -8+4=-4 -4 (5,4) -4+4=0 0 (6,4) -12 (7,5) -12+4=-8 -8 (8,6) di-2dy 0-12=-12
7
6
5
8 (xi+1,yi+1) (xi,yi+1) (xi,yi-1) (xi-1,yi-1) (xi-1,yi+1) (xi,yi+1) (xi,yi-1) (xi+1,yi-1)
习题5.4/P149
推而广之: 如果k>1,则将x,y位置对调; 如果x<0,则dx取负数 如果y<0,则dy取负数 已知1(0≤k≤1)时的中点Bresenham算法函数:
习题5.6/P149
5.6 试用中点Bresenham算法扫描转换圆心在原点、 半径为8的园。 已知d0=1-R=-7
i 0 1 2 3 4 5 6 (xi yi) (0, 8) (1, 8) (2, 8) (3, 7) (4, 7) (5, 6) (6, 5) di -7 -4 1 -6 3 2 5 2x+3 3 5 9 2(x-y)+5
多边形
ET表
6
5
4 3 2 1 6 5 4 3 2 3,3,-1 1, 3, 1/2 3,6,1/4 6,6,-1 6,5,1
3.75,6,1/4 3.5,6,1/4 3.25,6,1/4 1.5,3,1/2
5,6,-1 6,6,-1 7,5,0 3,3,-1 3,6,1/4 7,5,0 6,5, 1 7,5,0
1, 3, 1/2
7,5,0
AET表 ∴按p119的规则1 ,得交点: (1,1)(7,1)、(2,2)(3,2)、(3,2)(7,2)、 (4,3)(7,3)、(4,4)(6,4)、(6,4)(7,4)、 (4,5)(5,5)
1
1,1,∞
7,5,0
补充题,扫描线种子填充算法
栈:
3
ห้องสมุดไป่ตู้
S
1
12
2
9
11
7
13
4 5 6 8
10
s 2,3,1 4,3,1 5,3,1 6,3,1 8,9,7,3,1 10,9,7,3,1 9,7,3,1 12,11,7,3,1 11,7,3,1 7,3,1 13,3,1 3,1 1
计算机图形学基础
华东理工大学计算机系· 谢晓玲
习题5.2/P149
5.2 用DDA算法、中点Bresenham算法和改进 Bresenham算法扫描转换直线段P1P2,其中P1为 (0,0)、 P2为(8,6)。 i xi yi (xi,yi) ①DDA算法: 0 0, 0 (0,0) 1 1, 0.75 (1,1) 已知P1(0,0)、P2(8,6), 2 2,1.5 (2,2) 则:dx=8, dy=6 3 3, 2.25 (3,2) 4 4,3.0 (4,3) ∵dx>dy并且k<1 5 5,3.75 (5,4) ∴取Δx=1,Δy=k=6/8=0.75 6 6,4.5 (6,5) ∴xi+1= xi+1,yi+1=yi+0.75 7 7,5.25 (7,5)
(xi-1,yi) (xi-1,yi+1)
习题5.4/P149
|k|≥1 5(k≥1) dx>0,dy=1 D0=2dx-dy Di<0,Di+1=Di+2(dx-dy) Di0,Di+1=Di+2dx 6(k≥1) D0=-2dx+2dy dx<0,dy=-1 Di<0,Di+1=Di-2dx Di0,Di+1=Di+2(dy-dx) 7(k≤-1) D0=2dx+dy dx<0,dy=1 Di<0,Di+1=Di+2(dx+dy) Di0,Di+1=Di+2dx 8(k≤-1) D0=-2dx-dy dx>0,dy=-1 Di<0,Di+1=Di-2(dx+dy) Di0,Di+1=Di-2dx
习题5.4/P149
5.4 将中点Bresenham算法画直线段,推广到任意斜率的 直线段。 4 1 |k|≤1 1(0≤k≤1) D0=dx-2dy dx=1,dy>0 Di<0,Di+1=Di+2(dx-dy) Di0,Di+1=Di-2dy 2(0≤k≤1) D0=-dx+2dy dx=-1,dy<0 Di<0,Di+1=Di+2(dy-dx) Di0,Di+1=Di+2dy 3(-1≤k≤0) D0=-dx-2dy dx=1,dy<0 Di<0,Di+1=Di-2dy Di0,Di+1=Di-2(dx+dy) 4(-1≤k≤0) D0=dx+2dy dx=-1,dy>0 Di<0,Di+1=Di+2dy Di0,Di+1=Di+2(dx+dy) 2 (xi+1,yi+1) (xi+1,yi) (xi-1,yi-1) (xi-1,yi) (xi+1,yi) (xi+1,yi-1) 3
-7
-1 3 7
习题5.11/P149
5.11 采用扫描转换算法对图所示多边形进行填充, 试写出ET表和当扫描线y=4时的有效边表AET表。 设节点的数据结构:xmin ymax 1/k next
6 5 4 3 2 1 3,3,-1 1, 3, 1/2 3,6,1/4 1,1,∞ 7,5,0 6,6,-1 6,5,1
void MidBresenhamLine(int x0,int y0,int x1,int y1,int color); 1(0≤k≤1) 2(0≤k≤1) 3(-1≤k≤0) 4(-1≤k≤0) 5(k≥1) 6(k≥1) 7(k≤-1) 8(k≤-1) (x0,y0),(x1,y1) (x0,y0),(x1,y1) (x0,y0),(x1,y1) (x0,y0),(x1,y1) (x0,y0),(x1,y1) (x0,y0),(x1,y1) (x0,y0),(x1,y1) (x0,y0),(x1,y1) MidBresenhamLine(x0,y0,x1,y1,15) MidBresenhamLine(-x0,-y0,-x1,-y1,15) MidBresenhamLine(x0,-y0,x1,-y1,15) MidBresenhamLine(-x0,y0,-x1,y1,15) MidBresenhamLine(y0,x0,y1,x1,15) MidBresenhamLine(-y0,-x0,-y1,-x1,15) MidBresenhamLine(y0,-x0,y1,-x1,15) MidBresenhamLine(-y0,x0,-y1,x1,15)
习题5.3/P149
yi+2 ②取dx=-1,dy=k 设di=F(xi-1,yi+0.5) yi+1 =yi+0.5-k(xi-1)-b yi 当di0,下一点(xi-1,yi) xi-2 xi-1 xi di+1=F(xi-2,yi+0.5)=di+k 第二象限 当di0,下一点(xi-1,yi+1) di+1=F(xi-2,yi+1.5)=di+1+k d0=F(x0-1,y0+0.5)=0.5+k 令Di=2dxdi,得D0=dx+2dy,D与d异号 当Di0,下一点(xi-1,yi),Di+1=Di+2dy 当Di0,下一点(xi-1,yi+1),Di+1=Di+2(dx+dy)
12-16=-4 8-16=-8 4-16=-12 12-16=-4
习题5.3/P149
5.3 试用中点Bresenham算法画直线段的原理,推导斜率在 [-1,0]之间的直线段绘制过程。 yi ∵k[-1,0],即|k|1 ∴取|dx|=1 ①取dx=1,dy=-k yi-1 设di=F(xi+1,yi-0.5) =yi-0.5-k(xi+1)-b yi-2 当di0,下一点(xi+1,yi) di+1=F(xi+2,yi-0.5)=di-k xi xi+1 xi+2 当di0,下一点(xi+1,yi-1) 第四象限 di+1=F(xi+2,yi-1.5)=di-1-k d0=F(x0+1,y0-0.5)=-(k+0.5) 令Di=2dxdi,得D0=-(dx+2dy),D与d同号 当Di0,下一点(xi,yi-1),Di+1=Di-2dy 当Di0,下一点(xi+1,yi-1),Di+1=Di-2(dx+dy)
0-12=-12
习题5.2/P149
③改进Bresenham算法: dx=8,dy=6,2dx=16,2dy=12,e0=-dx=-8
i (xi yi) ei 0 (0, 0) -8 1 (1, 1) -12 2 (2, 1) 0 3 (3, 2) -4 4 (4, 3) -8 5 (5, 4) -12 6 (6, 4) 0 7 (7, 5) -4 ei+2dy -8+12=4 -12+12=0 0+12=12 -4+12=8 -8+12=4 -12+12=0 0+12=12 -4+12=8 (xi+1,yi+1) (1,1) (2,1) (3,2) (4,3) (5,4) (6,4) (7,5) (8,6) ei-2dx 4-16=-12
习题5.2/P149
②中点Bresenham算法: dx=8,dy=6,2(dx-dy)=4,-2dy=-12,d0=dx-2dy=-4
i (xi yi) 0 (0, 0) 1 (1, 1) 2 (2, 1) 3 (3, 2) 4 (4, 3) 5 (5, 4) 6 (6, 4) 7 (7, 5) di (xi+1,yi+1) di+2(dx-dy) -4 (1,1) -4+4=0 0 (2,1) -12 (3,2) -12+4=-8 -8 (4,3) -8+4=-4 -4 (5,4) -4+4=0 0 (6,4) -12 (7,5) -12+4=-8 -8 (8,6) di-2dy 0-12=-12
7
6
5
8 (xi+1,yi+1) (xi,yi+1) (xi,yi-1) (xi-1,yi-1) (xi-1,yi+1) (xi,yi+1) (xi,yi-1) (xi+1,yi-1)
习题5.4/P149
推而广之: 如果k>1,则将x,y位置对调; 如果x<0,则dx取负数 如果y<0,则dy取负数 已知1(0≤k≤1)时的中点Bresenham算法函数:
习题5.6/P149
5.6 试用中点Bresenham算法扫描转换圆心在原点、 半径为8的园。 已知d0=1-R=-7
i 0 1 2 3 4 5 6 (xi yi) (0, 8) (1, 8) (2, 8) (3, 7) (4, 7) (5, 6) (6, 5) di -7 -4 1 -6 3 2 5 2x+3 3 5 9 2(x-y)+5
多边形
ET表
6
5
4 3 2 1 6 5 4 3 2 3,3,-1 1, 3, 1/2 3,6,1/4 6,6,-1 6,5,1
3.75,6,1/4 3.5,6,1/4 3.25,6,1/4 1.5,3,1/2
5,6,-1 6,6,-1 7,5,0 3,3,-1 3,6,1/4 7,5,0 6,5, 1 7,5,0
1, 3, 1/2
7,5,0
AET表 ∴按p119的规则1 ,得交点: (1,1)(7,1)、(2,2)(3,2)、(3,2)(7,2)、 (4,3)(7,3)、(4,4)(6,4)、(6,4)(7,4)、 (4,5)(5,5)
1
1,1,∞
7,5,0
补充题,扫描线种子填充算法
栈:
3
ห้องสมุดไป่ตู้
S
1
12
2
9
11
7
13
4 5 6 8
10
s 2,3,1 4,3,1 5,3,1 6,3,1 8,9,7,3,1 10,9,7,3,1 9,7,3,1 12,11,7,3,1 11,7,3,1 7,3,1 13,3,1 3,1 1
计算机图形学基础
华东理工大学计算机系· 谢晓玲
习题5.2/P149
5.2 用DDA算法、中点Bresenham算法和改进 Bresenham算法扫描转换直线段P1P2,其中P1为 (0,0)、 P2为(8,6)。 i xi yi (xi,yi) ①DDA算法: 0 0, 0 (0,0) 1 1, 0.75 (1,1) 已知P1(0,0)、P2(8,6), 2 2,1.5 (2,2) 则:dx=8, dy=6 3 3, 2.25 (3,2) 4 4,3.0 (4,3) ∵dx>dy并且k<1 5 5,3.75 (5,4) ∴取Δx=1,Δy=k=6/8=0.75 6 6,4.5 (6,5) ∴xi+1= xi+1,yi+1=yi+0.75 7 7,5.25 (7,5)
(xi-1,yi) (xi-1,yi+1)
习题5.4/P149
|k|≥1 5(k≥1) dx>0,dy=1 D0=2dx-dy Di<0,Di+1=Di+2(dx-dy) Di0,Di+1=Di+2dx 6(k≥1) D0=-2dx+2dy dx<0,dy=-1 Di<0,Di+1=Di-2dx Di0,Di+1=Di+2(dy-dx) 7(k≤-1) D0=2dx+dy dx<0,dy=1 Di<0,Di+1=Di+2(dx+dy) Di0,Di+1=Di+2dx 8(k≤-1) D0=-2dx-dy dx>0,dy=-1 Di<0,Di+1=Di-2(dx+dy) Di0,Di+1=Di-2dx
习题5.4/P149
5.4 将中点Bresenham算法画直线段,推广到任意斜率的 直线段。 4 1 |k|≤1 1(0≤k≤1) D0=dx-2dy dx=1,dy>0 Di<0,Di+1=Di+2(dx-dy) Di0,Di+1=Di-2dy 2(0≤k≤1) D0=-dx+2dy dx=-1,dy<0 Di<0,Di+1=Di+2(dy-dx) Di0,Di+1=Di+2dy 3(-1≤k≤0) D0=-dx-2dy dx=1,dy<0 Di<0,Di+1=Di-2dy Di0,Di+1=Di-2(dx+dy) 4(-1≤k≤0) D0=dx+2dy dx=-1,dy>0 Di<0,Di+1=Di+2dy Di0,Di+1=Di+2(dx+dy) 2 (xi+1,yi+1) (xi+1,yi) (xi-1,yi-1) (xi-1,yi) (xi+1,yi) (xi+1,yi-1) 3
-7
-1 3 7
习题5.11/P149
5.11 采用扫描转换算法对图所示多边形进行填充, 试写出ET表和当扫描线y=4时的有效边表AET表。 设节点的数据结构:xmin ymax 1/k next
6 5 4 3 2 1 3,3,-1 1, 3, 1/2 3,6,1/4 1,1,∞ 7,5,0 6,6,-1 6,5,1
void MidBresenhamLine(int x0,int y0,int x1,int y1,int color); 1(0≤k≤1) 2(0≤k≤1) 3(-1≤k≤0) 4(-1≤k≤0) 5(k≥1) 6(k≥1) 7(k≤-1) 8(k≤-1) (x0,y0),(x1,y1) (x0,y0),(x1,y1) (x0,y0),(x1,y1) (x0,y0),(x1,y1) (x0,y0),(x1,y1) (x0,y0),(x1,y1) (x0,y0),(x1,y1) (x0,y0),(x1,y1) MidBresenhamLine(x0,y0,x1,y1,15) MidBresenhamLine(-x0,-y0,-x1,-y1,15) MidBresenhamLine(x0,-y0,x1,-y1,15) MidBresenhamLine(-x0,y0,-x1,y1,15) MidBresenhamLine(y0,x0,y1,x1,15) MidBresenhamLine(-y0,-x0,-y1,-x1,15) MidBresenhamLine(y0,-x0,y1,-x1,15) MidBresenhamLine(-y0,x0,-y1,x1,15)
习题5.3/P149
yi+2 ②取dx=-1,dy=k 设di=F(xi-1,yi+0.5) yi+1 =yi+0.5-k(xi-1)-b yi 当di0,下一点(xi-1,yi) xi-2 xi-1 xi di+1=F(xi-2,yi+0.5)=di+k 第二象限 当di0,下一点(xi-1,yi+1) di+1=F(xi-2,yi+1.5)=di+1+k d0=F(x0-1,y0+0.5)=0.5+k 令Di=2dxdi,得D0=dx+2dy,D与d异号 当Di0,下一点(xi-1,yi),Di+1=Di+2dy 当Di0,下一点(xi-1,yi+1),Di+1=Di+2(dx+dy)
12-16=-4 8-16=-8 4-16=-12 12-16=-4
习题5.3/P149
5.3 试用中点Bresenham算法画直线段的原理,推导斜率在 [-1,0]之间的直线段绘制过程。 yi ∵k[-1,0],即|k|1 ∴取|dx|=1 ①取dx=1,dy=-k yi-1 设di=F(xi+1,yi-0.5) =yi-0.5-k(xi+1)-b yi-2 当di0,下一点(xi+1,yi) di+1=F(xi+2,yi-0.5)=di-k xi xi+1 xi+2 当di0,下一点(xi+1,yi-1) 第四象限 di+1=F(xi+2,yi-1.5)=di-1-k d0=F(x0+1,y0-0.5)=-(k+0.5) 令Di=2dxdi,得D0=-(dx+2dy),D与d同号 当Di0,下一点(xi,yi-1),Di+1=Di-2dy 当Di0,下一点(xi+1,yi-1),Di+1=Di-2(dx+dy)
0-12=-12
习题5.2/P149
③改进Bresenham算法: dx=8,dy=6,2dx=16,2dy=12,e0=-dx=-8
i (xi yi) ei 0 (0, 0) -8 1 (1, 1) -12 2 (2, 1) 0 3 (3, 2) -4 4 (4, 3) -8 5 (5, 4) -12 6 (6, 4) 0 7 (7, 5) -4 ei+2dy -8+12=4 -12+12=0 0+12=12 -4+12=8 -8+12=4 -12+12=0 0+12=12 -4+12=8 (xi+1,yi+1) (1,1) (2,1) (3,2) (4,3) (5,4) (6,4) (7,5) (8,6) ei-2dx 4-16=-12