计算机图形学计算题目参考答案_精品文档文档格式.doc
《计算机图形学计算题目参考答案_精品文档文档格式.doc》由会员分享,可在线阅读,更多相关《计算机图形学计算题目参考答案_精品文档文档格式.doc(12页珍藏版)》请在冰豆网上搜索。
3.已知空间中一条线段的两个顶点为d1(5.0f,3.0f,-2.0f)d2(6.0f,4.0f,-2.0f)计算出其绕(y=3,z=0)的轴旋转90°
后再缩小0.5倍后的新的线段的两个顶点坐标,要求写出每一个计算后得到的新矩阵。
平移矩阵= 缩放矩阵=
旋转矩阵绕x轴=绕y轴=
绕z轴=
缩小0.5矩阵A=沿Y轴平移3矩阵B=
绕X旋转90度矩阵C=沿Y轴平移-3矩阵D=
上面每个矩阵1分
AxB=AxBxC=
M=AxBxCxD=(乘的顺序正确2分,结果正确2分)
d1转换后=Mxd1=(2.5f,2.5f,0.0f)
d2转换后=Mxd2=(3.0f,2.5f,0.5f)(公式正确1分,结果正确1分)
4.分别使用数值微分法(DDA算法)、中点画线法和Bresenham算法计算出P0(1,1)和P1(3,6)之间扫描过的点。
中点画线法
Bresenham算法
数值微分法(DDA算法)
斜率由于斜率大于1增量
(2分)
y
int(x+0.5)
x+0.5
1
2
1.4+0.5
3
1.8+0.5
4
2.2+0.5
5
2.6+0.5
6
3.0+0.5
(标题正确2分,下面每行1分)
中点画线法
斜率由于斜率大于1
(2分)
x
d
2*a
-3
2*(a+b)
-1
(标题没分,写公式占4分错1个扣1分,错1个值扣1分最多扣4分;
没写公式错1个值扣1分扣满8分)
Bresenham算法
斜率由于斜率大于1
e
-5
5.使用中点画圆算法计算出以点(4,6)为圆心,半径为8的圆的1/8圆弧点坐标。
中点画圆法
x+4
y+6
8
-7
2x+3
14
-4
2(x-y)+5
7
-6
13
9
12
(标题没分,写公式占5分错1个扣1分,错1个值扣1分最多扣5分;
没写公式错1个值扣1分扣满10分)
6.使用Bresenham椭圆算法计算出以点(3,5)为圆心,半径a=7,b=4的椭圆的1/4圆弧点的坐标。
e<
0时
e>
=0时
x+3
y+5
-327
-311
-279
-215
-199
-55
-87
169
-188
-131
-12
221
49
-110
240
10
289
338
7.已知如下多边形,使用扫描线算法求出该多边形的活化边表。
(结果保存小数点后1位)
扫描线:
Y=1:
->
Y=2:
Y=3:
Y=4:
Y=5:
错一个节点扣1分,顺序写错每个节点扣0.5分,扫描线顺序也可以从5-1
8.已知种子填充四连通递归算法函数如下:
voidfloodfill4(intx,inty,CColoroldColor,CColornewColor)
{
CClientDCdc(this);
if(dc.GetPixel()==oldColor)
{
dc.SetPixel(x,y,newColor);
floodfill4(x-1,y,oldColor,newColor);
floodfill4(x+1,y,oldColor,newColor);
floodfill4(x,y+1,oldColor,newColor);
floodfill4(x,y-1,oldColor,newColor);
}
根据以上函数写出以下图形区域填充算法的过程:
为边界,为起始点
102
101
77
78
79
80
81
99
100
76
75
84
83
82
98
97
96
74
73
85
86
72
71
87
21
70
69
11
20
19
18
68
15
16
17
67
24
23
22
66
25
26
27
65
30
29
28
64
31
32
33
62
63
36
35
34
61
60
59
37
38
39
55
56
57
58
42
41
40
54
53
52
51
43
44
45
46
47
48
50
95
94
93
92
91
90
89
88
每10个序号1分,中间一个点序号写错后面所有序号都不得分
9.已知直线段的两点(-200,-100)和(700,600)分别使用Cohen-Sutherland和梁友栋-BarSky算法计算对于区域(0,0,500,600)裁剪后的直线段,要求写出计算过程。
Cohen-Sutherland算法给定公式:
左交点:
右交点:
下交点:
上交点:
裁剪顺序为上下右左,区域编码如下:
1001
1000
0001
0101
0000
0100
1010
0010
0110
令x1=-200y1=-100x2=700y2=600
(x1,y1)点的code1=0101(x2,y2)点的code2=0010(1分)
∵(code1!
=0||code2!
=0)&
&
code1&
code2==0
∴进行裁剪
上边code1&
1000=0不裁剪cdoe2&
1000=0不裁剪(1分)
下边code1&
0100!
=0进行裁剪
y1=0,x1=≈-71
(x1,y1)点的code1=0001
code2&
0100=0不裁剪(2分)
右边code1&
0010=0不裁剪
0010!
x2=500,y2=≈444
(x2,y2)点的code2=0000(2分)
左边code1&
0001!
x1=0,y2=≈56
(x1,y1)点的code1=0000(2分)
裁剪后的线段为(0,56)(500,444)
梁友栋-BarSky算法给定公式:
令x1=-200y1=-100x2=700y2=600u1=0,u2=1(1分)
p1=-900q1=-200u=2/9∵p1<
0u>
u1成立∴u1=2/9u2=1(2分)
p2=900q2=700u=7/9∵p2>
0u<
u2成立∴u1=2/9u2=7/9(2分)
p3=-700q3=-100u=1/9∵p3<
u1不成立∴u1=2/9u2=7/9(2分)
p4=700q4=700u=1∵p4>
u2不成立∴u1=2/9u2=7/9(2分)
裁剪后的点为(x1+u1(x2-x1),y1+u1(y2-y1))≈(0,56)
(x1+u2(x2-x1),y1+u2(y2-y1))≈(500,444)(1分)
10.已知如下多边形进行区域裁剪,若安装p1-p6顺序遍历多边形的各条边,按顺序写出该多边形裁剪的处理线段及保留的顶点。
处理线段P1P2
输出AB(1分)
处理线段P2P3
输出CP3(1分)
处理线段P3P4
输出D(2分)
处理线段P4P5
输出EP5(1分)
处理线段P5P6
输出F(2分)
处理线段P6P7
输出GP7(1分)
处理线段P7P1
输出H(2分)
11.已知空间中一点