计算机图形学计算题目参考答案.doc
《计算机图形学计算题目参考答案.doc》由会员分享,可在线阅读,更多相关《计算机图形学计算题目参考答案.doc(12页珍藏版)》请在冰点文库上搜索。
题目中所有的坐标系,均以OpenGL坐标系为准
1.使用OpenGL图形库渲染如下四棱截锥体图形,根据给定点的A、C、G的坐标推算出其余五个点B、D、E、F、H的坐标
答:
B(1.0f,-1.0f,0.0f)
D(-1.0f,-1.0f,-2.0f)
E(-0.5f,1.0f,-0.5f)
F(-0.5f,1.0f,-1.5f)
H(0.5f,1.0f,-0.5f)
每个坐标2分
2.已知在平面P上有两条向量v1和v2他们的值分别(2.0f,0.0f,0.0f),(0.0f,3.0f,0.0f)求出垂直与平面P的法向量v3的值为多少,求出v1与v2之间的夹角θ的度数或cos值为多少?
要求写出计算过程。
向量的模 向量的倍乘
向量之和
向量的点积
向量的叉积
答:
v3=v1与v2叉积或v1×v2
v3=(y1z2–y2z1,z1x2–x2z1,x1y2–x2y1)
v3=(0.0f,0.0f,6.0f) (3分其中公式2分值1分)
转换单位向量
v3=(0.0f,0.0f,1.0f) (1分)
cosθ=|v1|与|v2|的点积或|v1|·|v2|
|v1|=(1.0f,0.0f,0.0f)(1分)
|v2|=(0.0f,1.0f,0.0f)(1分)
cosθ=x1x2+y1y2+z1z2;
cosθ=1.0f*0.0f+0.0f*1.0f+0.0f*0.0f;
cosθ=0
θ=90°(4分其中公式2分值2分)
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
1
1
2
1
1.4+0.5
3
2
1.8+0.5
4
2
2.2+0.5
5
3
2.6+0.5
6
3
3.0+0.5
(标题正确2分,下面每行1分)
中点画线法
斜率由于斜率大于1
(2分)
y
x
d
d
1
1
1
2*a
2
1
-3
2*(a+b)
3
2
3
2*a
4
2
-1
2*(a+b)
5
3
5
2*a
6
3
1
(标题没分,写公式占4分错1个扣1分,错1个值扣1分最多扣4分;没写公式错1个值扣1分扣满8分)
Bresenham算法
斜率由于斜率大于1
(2分)
y
x
e
e
1
1
-1
2
1
3
3
2
-3
4
2
1
5
3
-5
6
3
-1
(标题没分,写公式占4分错1个扣1分,错1个值扣1分最多扣4分;没写公式错1个值扣1分扣满8分)
5.使用中点画圆算法计算出以点(4,6)为圆心,半径为8的圆的1/8圆弧点坐标。
中点画圆法
答:
x
y
d
d
x+4
y+6
0
8
-7
2x+3
4
14
1
8
-4
2x+3
5
14
2
8
1
2(x-y)+5
6
14
3
7
-6
2x+3
7
13
4
7
3
2(x-y)+5
8
13
5
6
2
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
y
e
d
e
x+3
y+5
0
4
-327
-311
3
9
1
4
-279
-215
4
9
2
4
-199
-55
5
9
3
4
-87
169
6
9
4
3
-188
-131
7
8
5
3
-12
221
8
8
6
2
49
-110
9
7
7
1
240
240
10
6
7
0
289
338
10
5
(标题没分,写公式占5分错1个扣1分,错1个值扣1分最多扣5分;没写公式错1个值扣1分扣满10分)
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
3
4
5
6
72
71
87
2
1
8
7
21
70
69
11
10
9
20
19
18
68
12
13
14
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
49
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算法给定公式:
左交点:
右交点:
下交点:
上交点:
答:
裁剪顺序为上下右左,区域编码如下:
(2分)
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不裁剪
code2&0010!
=0进行裁剪
x2=500,y2=≈444
(x2,y2)点的code2=0000(2分)
左边code1&0001!
=0进行裁剪
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>0up3=-700q3=-100u=1/9∵p3<0u>u1不成立∴u1=2/9u2=7/9(2分)
p4=700q4=700u=1∵p4>0u裁剪后的点为(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.已知空间中一点的颜色由3层纹理融合而成,最上层点的颜色值(RGBA)为(255,200,100,100),中间夹层点的颜色值为(0,0,255,80),背景色的颜色值为(100,100,100,200)计算出该点的最终颜色值为多少?
答:
第一次融合
(1分)
(1分)
(1分)
融合后颜色值为(100,78,194,80)
第二次融合
(1分)
(1分)
(1分)
融合后颜色值为(100,93,130,200)
第三次融合
(1分)
(1分)
(1分)
最终颜色值为(78,73,102)