《计算机图形学》雨课堂随堂测试 - CG-4 二维与三维几何变换#
一、 单项选择题#
1. 点 P P P 的齐次坐标为 ( 6 , − 2 , 2 ) (6, -2, 2) ( 6 , − 2 , 2 ) ,其对应的普通坐标是: [ D ]
A. ( 6 , − 2 , 1 ) (6,-2,1) ( 6 , − 2 , 1 )
B. ( 3 , − 1 , 1 ) (3,-1,1) ( 3 , − 1 , 1 )
C. ( 6 , − 2 ) (6,-2) ( 6 , − 2 )
D. ( 3 , − 1 ) (3,-1) ( 3 , − 1 )
【解析】
在齐次坐标表示中,一个 n n n 维向量由一个 n + 1 n+1 n + 1 维向量表示。对于齐次坐标 ( X , Y , W ) (X, Y, W) ( X , Y , W ) (其中 W ≠ 0 W \ne 0 W = 0 ),其对应的二维笛卡尔(普通)坐标为 ( x , y ) = ( X / W , Y / W ) (x, y) = (X/W, Y/W) ( x , y ) = ( X / W , Y / W ) 。
本题中 P ( 6 , − 2 , 2 ) P(6, -2, 2) P ( 6 , − 2 , 2 ) ,则对应普通坐标为 ( 6 / 2 , − 2 / 2 ) = ( 3 , − 1 ) (6/2, -2/2) = (3, -1) ( 6/2 , − 2/2 ) = ( 3 , − 1 ) 。因此选 D。
2. 将下图所示四边形 A B C D ABCD A B C D 绕点 P ( 5 , 4 ) P(5,4) P ( 5 , 4 ) 逆时针旋转 45 ∘ 45^\circ 4 5 ∘ ,涉及到三个变换矩阵,则三个矩阵复合的顺序是? [ C ]
A. T ( − 5 , − 4 ) R ( 45 ∘ ) T ( 5 , 4 ) T(-5, -4)R(45^\circ)T(5, 4) T ( − 5 , − 4 ) R ( 4 5 ∘ ) T ( 5 , 4 )
B. R ( 45 ∘ ) T ( − 5 , − 4 ) T ( 5 , 4 ) R(45^\circ)T(-5, -4)T(5, 4) R ( 4 5 ∘ ) T ( − 5 , − 4 ) T ( 5 , 4 )
C. T ( 5 , 4 ) R ( 45 ∘ ) T ( − 5 , − 4 ) T(5, 4)R(45^\circ)T(-5, -4) T ( 5 , 4 ) R ( 4 5 ∘ ) T ( − 5 , − 4 )
D. T ( 5 , 4 ) T ( − 5 , − 4 ) R ( 45 ∘ ) T(5, 4)T(-5, -4)R(45^\circ) T ( 5 , 4 ) T ( − 5 , − 4 ) R ( 4 5 ∘ )
【解析】
绕任一非原点 P ( x p , y p ) P(x_p, y_p) P ( x p , y p ) 进行旋转,需经历以下步骤:
平移图形,使点 P P P 与坐标原点重合,平移矩阵为 T ( − x p , − y p ) = T ( − 5 , − 4 ) T(-x_p, -y_p) = T(-5, -4) T ( − x p , − y p ) = T ( − 5 , − 4 ) ;
以原点为中心旋转指定角度,旋转矩阵为 R ( 45 ∘ ) R(45^\circ) R ( 4 5 ∘ ) ;
反向平移,使原点移回点 P P P 的位置,平移矩阵为 T ( x p , y p ) = T ( 5 , 4 ) T(x_p, y_p) = T(5, 4) T ( x p , y p ) = T ( 5 , 4 ) 。
当使用列向量表示点坐标时,变换矩阵与坐标相乘是从右向左生效的:P ′ = T ( 5 , 4 ) ⋅ R ( 45 ∘ ) ⋅ T ( − 5 , − 4 ) ⋅ P P' = T(5, 4) \cdot R(45^\circ) \cdot T(-5, -4) \cdot P P ′ = T ( 5 , 4 ) ⋅ R ( 4 5 ∘ ) ⋅ T ( − 5 , − 4 ) ⋅ P 。
复合后的变换矩阵即为 T ( 5 , 4 ) R ( 45 ∘ ) T ( − 5 , − 4 ) T(5, 4)R(45^\circ)T(-5, -4) T ( 5 , 4 ) R ( 4 5 ∘ ) T ( − 5 , − 4 ) 。因此本题选 C。
3. 将下图所示四边形 A B C D ABCD A B C D 绕点 P ( 5 , 4 ) P(5,4) P ( 5 , 4 ) 逆时针旋转 45 ∘ 45^\circ 4 5 ∘ 的代码是: [ A ]
A.
glLoadIdentity ();
glTranslatef ( 5 , 4 , 0 );
glRotatef ( 45 , 0.0 f , 0.0 f , 1.0 f );
glTranslatef ( - 5 , - 4 , 0 );
DrawQuadrangle ();
B.
glLoadIdentity ();
glTranslatef ( - 5 , - 4 , 0 );
glRotatef ( 45 , 0.0 f , 0.0 f , 1.0 f );
glTranslatef ( 5 , 4 , 0 );
DrawQuadrangle ();
【解析】
在 OpenGL 中,当前的绘图变换矩阵是按照代码中变换命令调用的“相反顺序”(即右乘原则)对绘制顶点进行复合作用的。
要实现的数学变换矩阵为:T ( 5 , 4 ) ⋅ R ( 45 ∘ ) ⋅ T ( − 5 , − 4 ) T(5, 4) \cdot R(45^\circ) \cdot T(-5, -4) T ( 5 , 4 ) ⋅ R ( 4 5 ∘ ) ⋅ T ( − 5 , − 4 ) 。
根据反向原则,在代码中应依次先调用 glTranslatef(5, 4, 0),再调用 glRotatef(45, ...),最后调用 glTranslatef(-5, -4, 0)。
这样 OpenGL 最终生成的矩阵就是 T ( 5 , 4 ) ⋅ R ( 45 ∘ ) ⋅ T ( − 5 , − 4 ) T(5, 4) \cdot R(45^\circ) \cdot T(-5, -4) T ( 5 , 4 ) ⋅ R ( 4 5 ∘ ) ⋅ T ( − 5 , − 4 ) 。因此 A 选项正确。
4. 如下图所示,欲使 O B OB O B 绕 X X X 轴旋转至 X O Z XOZ X O Z 坐标平面内,旋转角度应为多少? [ C ]
A. ∠ A O B \angle AOB ∠ A O B
B. ∠ E O B \angle EOB ∠ E O B
C. ∠ E O B ′ \angle EOB' ∠ E O B ′
D. ∠ A O B ′ \angle AOB' ∠ A O B ′
【解析】
绕 X 轴旋转时,所有点的 X 坐标保持不变,而 Y、Z 坐标发生旋转。
欲使线段 O B OB O B 旋转到 X O Z XOZ X O Z 平面,也就是要使其在 Y O Z YOZ Y O Z 平面上的投影像绕坐标原点旋转至 Z 轴(O E OE O E )。
设 O B OB O B 在 Y O Z YOZ Y O Z 平面上的投影为 O B ′ OB' O B ′ ,那么需要旋转的角度即为 O B ′ OB' O B ′ 与 Z 轴(O E OE O E )的夹角,即 ∠ E O B ′ \angle EOB' ∠ E O B ′ 。因此选 C。
5. 在三维旋转变换中,关于 X X X 轴旋转 90 ∘ 90^\circ 9 0 ∘ 时变换特点描述正确的是什么? [ A ]
A. y ′ = − z y' = -z y ′ = − z
B. y ′ = z y' = z y ′ = z
C. y y y 坐标不变
D. x , y , z x, y, z x , y , z 坐标都不变
【解析】
绕 X 轴逆时针旋转角度 θ \theta θ 的三维变换公式为:
x ′ = x x' = x x ′ = x
y ′ = y cos θ − z sin θ y' = y\cos\theta - z\sin\theta y ′ = y cos θ − z sin θ
z ′ = y sin θ + z cos θ z' = y\sin\theta + z\cos\theta z ′ = y sin θ + z cos θ
当 θ = 90 ∘ \theta = 90^\circ θ = 9 0 ∘ 时,cos 90 ∘ = 0 \cos 90^\circ = 0 cos 9 0 ∘ = 0 ,sin 90 ∘ = 1 \sin 90^\circ = 1 sin 9 0 ∘ = 1 。
代入公式得:y ′ = y ( 0 ) − z ( 1 ) = − z y' = y(0) - z(1) = -z y ′ = y ( 0 ) − z ( 1 ) = − z ,z ′ = y ( 1 ) + z ( 0 ) = y z' = y(1) + z(0) = y z ′ = y ( 1 ) + z ( 0 ) = y 。
故 y ′ = − z y' = -z y ′ = − z 。选 A。
6. 空间四面体 A B C D ABCD A B C D 几何变换关于点 S ( − 2 , 2 , 2 ) S(-2, 2, 2) S ( − 2 , 2 , 2 ) 整体放大 2 倍的变换矩阵为: [ B ]
A. [ 1 0 0 − 2 0 1 0 2 0 0 1 2 0 0 0 1 ] [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 2 ] [ 1 0 0 2 0 1 0 − 2 0 0 1 − 2 0 0 0 1 ] \begin{bmatrix} 1 & 0 & 0 & -2 \\ 0 & 1 & 0 & 2 \\ 0 & 0 & 1 & 2 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 2 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 & 2 \\ 0 & 1 & 0 & -2 \\ 0 & 0 & 1 & -2 \\ 0 & 0 & 0 & 1 \end{bmatrix} 1 0 0 0 0 1 0 0 0 0 1 0 − 2 2 2 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 2 1 0 0 0 0 1 0 0 0 0 1 0 2 − 2 − 2 1
B. [ 1 0 0 − 2 0 1 0 2 0 0 1 2 0 0 0 1 ] [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 / 2 ] [ 1 0 0 2 0 1 0 − 2 0 0 1 − 2 0 0 0 1 ] \begin{bmatrix} 1 & 0 & 0 & -2 \\ 0 & 1 & 0 & 2 \\ 0 & 0 & 1 & 2 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1/2 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 & 2 \\ 0 & 1 & 0 & -2 \\ 0 & 0 & 1 & -2 \\ 0 & 0 & 0 & 1 \end{bmatrix} 1 0 0 0 0 1 0 0 0 0 1 0 − 2 2 2 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1/2 1 0 0 0 0 1 0 0 0 0 1 0 2 − 2 − 2 1
C. [ 1 0 0 2 0 1 0 − 2 0 0 1 − 2 0 0 0 1 ] [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 2 ] [ 1 0 0 − 2 0 1 0 2 0 0 1 2 0 0 0 1 ] \begin{bmatrix} 1 & 0 & 0 & 2 \\ 0 & 1 & 0 & -2 \\ 0 & 0 & 1 & -2 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 2 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 & -2 \\ 0 & 1 & 0 & 2 \\ 0 & 0 & 1 & 2 \\ 0 & 0 & 0 & 1 \end{bmatrix} 1 0 0 0 0 1 0 0 0 0 1 0 2 − 2 − 2 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 2 1 0 0 0 0 1 0 0 0 0 1 0 − 2 2 2 1
D. [ 1 0 0 2 0 1 0 − 2 0 0 1 − 2 0 0 0 1 ] [ 2 0 0 0 0 2 0 0 0 0 2 0 0 0 0 1 ] [ 1 0 0 − 2 0 1 0 2 0 0 1 2 0 0 0 1 ] \begin{bmatrix} 1 & 0 & 0 & 2 \\ 0 & 1 & 0 & -2 \\ 0 & 0 & 1 & -2 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 2 & 0 & 0 & 0 \\ 0 & 2 & 0 & 0 \\ 0 & 0 & 2 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 & -2 \\ 0 & 1 & 0 & 2 \\ 0 & 0 & 1 & 2 \\ 0 & 0 & 0 & 1 \end{bmatrix} 1 0 0 0 0 1 0 0 0 0 1 0 2 − 2 − 2 1 2 0 0 0 0 2 0 0 0 0 2 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 − 2 2 2 1
【解析】
关于任一点 S ( x s , y s , z s ) = S ( − 2 , 2 , 2 ) S(x_s, y_s, z_s) = S(-2, 2, 2) S ( x s , y s , z s ) = S ( − 2 , 2 , 2 ) 的整体比例变换,其变换顺序为:
先将 S S S 移到原点,变换矩阵为右侧的平移矩阵 T ( 2 , − 2 , − 2 ) T(2, -2, -2) T ( 2 , − 2 , − 2 ) :
[ 1 0 0 2 0 1 0 − 2 0 0 1 − 2 0 0 0 1 ] \begin{bmatrix} 1 & 0 & 0 & 2 \\ 0 & 1 & 0 & -2 \\ 0 & 0 & 1 & -2 \\ 0 & 0 & 0 & 1 \end{bmatrix} 1 0 0 0 0 1 0 0 0 0 1 0 2 − 2 − 2 1
在原点进行整体缩放。在 4x4 齐次坐标变换矩阵中,右下角的元素 s s s 对应的是整体缩放。对于点 [ x , y , z , 1 ] T [x, y, z, 1]^T [ x , y , z , 1 ] T ,乘上右下角为 1 / 2 1/2 1/2 的矩阵后变为 [ x , y , z , 1 / 2 ] T [x, y, z, 1/2]^T [ x , y , z , 1/2 ] T ,对应普通笛卡尔坐标的整体放大 2 倍(将各分量除以齐次分量 W = 1 / 2 W=1/2 W = 1/2 )。故中间的缩放矩阵为:
[ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 / 2 ] \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1/2 \end{bmatrix} 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1/2
最后移回原点,变换矩阵为左侧的平移矩阵 T ( − 2 , 2 , 2 ) T(-2, 2, 2) T ( − 2 , 2 , 2 ) :
[ 1 0 0 − 2 0 1 0 2 0 0 1 2 0 0 0 1 ] \begin{bmatrix} 1 & 0 & 0 & -2 \\ 0 & 1 & 0 & 2 \\ 0 & 0 & 1 & 2 \\ 0 & 0 & 0 & 1 \end{bmatrix} 1 0 0 0 0 1 0 0 0 0 1 0 − 2 2 2 1
根据矩阵复合顺序(右乘原则),整个复合变换矩阵为 T ( − 2 , 2 , 2 ) ⋅ S 整体 ( 2 ) ⋅ T ( 2 , − 2 , − 2 ) T(-2, 2, 2) \cdot S_{\text{整体}}(2) \cdot T(2, -2, -2) T ( − 2 , 2 , 2 ) ⋅ S 整体 ( 2 ) ⋅ T ( 2 , − 2 , − 2 ) ,即 B 选项的形式。
7. 下面哪项不是齐次坐标的特点? [ D ]
A. 用 n + 1 n+1 n + 1 维向量表示一个 n n n 维向量
B. 将图形的变换统一为图形 of the 坐标矩阵与某一变换矩阵相乘的形式
C. 易于表示无穷远点
D. 一个 n n n 维向量的齐次坐标表示是唯一的
【解析】
齐次坐标中,n n n 维空间中的点 ( x 1 , x 2 , … , x n ) (x_1, x_2, \dots, x_n) ( x 1 , x 2 , … , x n ) 可以表示为 ( h x 1 , h x 2 , … , h x n , h ) (hx_1, hx_2, \dots, hx_n, h) ( h x 1 , h x 2 , … , h x n , h ) (其中 h ≠ 0 h \ne 0 h = 0 )。
由于 h h h 可以取任意非零实数,同一个普通坐标点有无数个对应的齐次坐标表示,因此齐次坐标的表示是不唯一的。D 选项描述错误。本题选 D。
8. 经过三维几何变换,使得图 1 中的图形成为如图 2 所示的图形,其几何变换是什么? [ B ]
A. 先沿 X X X 轴方向平移 1 个单位,再绕 Y Y Y 轴逆时针旋转 45 ∘ 45^\circ 4 5 ∘
B. 先绕 Y Y Y 轴逆时针旋转 45 ∘ 45^\circ 4 5 ∘ ,再沿 X X X 轴方向平移 1 个单位
C. 先沿 X X X 轴方向平移 1 个单位,再绕 Y Y Y 轴顺时针旋转 45 ∘ 45^\circ 4 5 ∘
D. 先绕 Y Y Y 轴顺时针旋转 45 ∘ 45^\circ 4 5 ∘ ,再沿 X X X 轴方向平移 1 个单位
【解析】
观察图形变换前后的状态:
在图 1 中,立方体位于原点,各边缘平行于坐标轴。
在图 2 中,立方体发生旋转并发生平移。注意到,立方体是“绕自身的 Y 轴”逆时针旋转了 45 度(其底面中轴线倾斜),且立方体的中心整体偏离了原点,向 X 轴正方向平移了 1 个单位。
若先平移后旋转(如 A 选项),则旋转是绕原点 Y 轴进行的,立方体旋转后其中心将不再位于 X 轴上,而是处于斜向轨道。这与图 2 不符。
正确的顺序是:先绕自身 Y 轴逆时针旋转 45 度,然后再沿 X 轴方向平移 1 个单位。因此本题选 B。
9. 空间四面体 A B C D ABCD A B C D 关于 X X X 轴进行对称变换的变换矩阵为: [ C ]
A. [ − 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ] \begin{bmatrix} -1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} − 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
B. [ 1 0 0 0 0 − 1 0 0 0 0 1 0 0 0 0 1 ] \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & -1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} 1 0 0 0 0 − 1 0 0 0 0 1 0 0 0 0 1
C. [ 1 0 0 0 0 − 1 0 0 0 0 − 1 0 0 0 0 1 ] \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & -1 & 0 & 0 \\ 0 & 0 & -1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} 1 0 0 0 0 − 1 0 0 0 0 − 1 0 0 0 0 1
D. [ − 1 0 0 0 0 − 1 0 0 0 0 − 1 0 0 0 0 1 ] \begin{bmatrix} -1 & 0 & 0 & 0 \\ 0 & -1 & 0 & 0 \\ 0 & 0 & -1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} − 1 0 0 0 0 − 1 0 0 0 0 − 1 0 0 0 0 1
【解析】
三维空间中关于 X 轴进行反射(对称)变换时:
X 轴坐标保持不变,即 x ′ = x x' = x x ′ = x ;
Y 轴和 Z 轴的坐标变反,即 y ′ = − y y' = -y y ′ = − y ,z ′ = − z z' = -z z ′ = − z 。
对应的主对角线上的元素分别为 1 , − 1 , − 1 , 1 1, -1, -1, 1 1 , − 1 , − 1 , 1 。这与 C 选项相符。
二、 填空题#
10. 基本几何变换都是相对于______ 坐标原点 ______和坐标轴进行的几何变换。
(注:填 坐标原点 或 原点 )
【解析】
基本的二维和三维几何变换(如平移、旋转、放缩、错切等)在定义时均是相对于坐标原点 和各自的坐标轴来进行矩阵描述的。如果是相对于任意其他参考点,必须先做平移使该点与原点重合,再进行基础变换,最后平移回原位。