这一块内容可以直接看Games101课程关于Transformation的讲解,更容易理解一些。齐次坐标是精华。二编补充了习题部分。
CG-02 变换#
1. 基础数学#
1.2 三角学性质#
- sin2α+cos2α=1
- sin(−α)=−sinα
- cos(−α)=cosα
- cosα=sin(2π−α)
- sin(α+β)=sinαcosβ+cosαsinβ
- cos(α+β)=cosαcosβ−sinαsinβ
2. 矩阵 ⭐#
2.2 基本矩阵运算#
2.2.1 矩阵加法与减法 (Addition/Subtraction)#
2.2.4 矩阵乘法#
-
左矩阵的列数必须等于右矩阵的行数。
公式:
cij=k=1∑naik⋅bkj
3.1 平移 (Translation)#

3.2 缩放 (Scaling)#

-
公式:
x′=x⋅sx,y′=y⋅sy
-
矩阵形式:
x′y′1=sx000sy0001⋅xy1
P′=S(sx,sy)⋅P
-
关于任意参考点的缩放:
- 平移参考点到原点。
- 关于原点缩放。
- 平移回原位置。
P′=T(xf,yf)⋅S(sx,sy)⋅T(−xf,−yf)⋅P
3.3 旋转 (Rotation)#

-
关于原点的旋转:
x′=x⋅cosθ−y⋅sinθ
y′=x⋅sinθ+y⋅cosθ
-
矩阵形式:
x′y′1=cosθsinθ0−sinθcosθ0001⋅xy1
P′=R(θ)⋅P
-
关于任意点的旋转:
- 平移旋转点到原点。
- 关于原点旋转。
- 平移回原位置。
x′=xr+(x−xr)⋅cosθ−(y−yr)⋅sinθ
y′=yr+(x−xr)⋅sinθ+(y−yr)⋅cosθ
P′=T(xr,yr)⋅R(θ)⋅T(−xr,−yr)⋅P
4.1 平移 (Translation)#
-
公式:
x′=x+tx,y′=y+ty,z′=z+tz
-
矩阵形式:
x′y′z′1=100001000010txtytz1⋅xyz1
4.2 缩放 (Scaling)#
-
公式:
x′=x⋅sx,y′=y⋅sy,z′=z⋅sz
-
矩阵形式:
x′y′z′1=sx0000sy0000sz00001⋅xyz1
4.3 旋转 (Rotation) :whale2:#
5. 变换的顺序#
-
矩阵乘法不满足交换律,变换的顺序会影响结果。
-
公式:
AB=BA
-
P′=Mn⋅Mn−1⋅⋯⋅M1⋅P
-
可以先将多个变换矩阵合并为一个矩阵,再应用到点上,以减少计算成本 。
-
逆变换:P′=M⋅P⟺P=M−1⋅P′
6. 齐次坐标 (Homogeneous Coordinates)#
- 定义 (Definition): 在二维中,点 (x,y) 的齐次坐标为 (x,y,1);在三维中,点 (x,y,z) 的齐次坐标为 (x,y,z,1)。
- 优势 (Advantages):
A 3D object is rotated by 90 degrees about an axis passing from (0, 1, 1) to (2, 1, 1). Write out the transformation matrix.
写出绕轴(0,1,1)至(2,1,1)旋转90°的变换矩阵。
Answer#
先计算旋转轴向量为 u=(1,0,0),实际上就是x轴正方向,然后逆时针(默认)旋转90度。
根据矩阵旋转公式,计算每个分量
- ux=1,uy=0,uz=0
- cosθ=cos(90∘)=0
- sinθ=sin(90∘)=1
将上述值代入旋转矩阵公式,矩阵 R 变为:
R=cosθ+ux2(1−cosθ)uyux(1−cosθ)+uzsinθuzux(1−cosθ)−uysinθuxuy(1−cosθ)−uzsinθcosθ+uy2(1−cosθ)uzuy(1−cosθ)+uxsinθuxuz(1−cosθ)+uysinθuyuz(1−cosθ)−uxsinθcosθ+uz2(1−cosθ)得到
R=1000010−10由于做旋转,是先平移做旋转再平移,所以齐次化的旋转矩阵是:
T=100000−1001000001总的变换矩阵为:
1000010000100111⋅100000100−1000001⋅1000010000100−1−11Describe what transformation the matrix M performs when applied to a 3D object:
M=100000300−2000001描述这个3D变换矩阵做什么操作。
Answer#
1. 观察矩阵结构#
矩阵 M 是一个 4×4 的齐次变换矩阵,其常用于表示三维空间的几何变换,齐次变换矩阵的结构通常如下:
r11r21r310r12r22r320r13r23r330txtytz1
- 其中,左上 ( 3×3 ) 的矩阵定义了旋转和缩放(线性变换部分)。
- 最后一列位置放入 (tx,ty,tz),用于表示平移。
具体到矩阵 M:
M=100000300−2000001
- 从矩阵第四列 [0,0,0,1]T 可以看出:没有平移分量,仅包含旋转和缩放。
只需要研究左上的 3×3 矩阵部分:
1000030−20
2. 如何判断旋转#
旋转矩阵有一些特点和作用:
- 旋转矩阵表示轴的重定义,它会重新定义 ( x )、( y )、( z ) 三个坐标轴的方向。
- 而矩阵总体的作用是将物体在局部坐标系中的点(列向量形式)变换到新的坐标系中。
观察矩阵的形式:
- 第一列是 [1,0,0]T,说明 x 轴没有变化(保持原来方向)。
- 第二列是 [0,0,3]T,说明旧 z 轴变为新的 y 轴方向。
- 第三列是 [0,−2,0]T,说明旧 y 轴变为新的 z 轴方向,但符号被翻转。
这说明,y 与 z 发生了互换,且 z 方向翻转了符号。
这是经典的绕 x 轴旋转 90° 的结果。
对比绕 x 轴旋转的矩阵:
Rx(90∘)=1000010−10基础形式与 M 对应的矩阵相符,因此可以认定矩阵包 M 含 绕 x 轴旋转 90 度 的操作。
3. 如何判断缩放#
旋转矩阵本身是一个正交矩阵,其列向量是单位化的正交向量,然而在矩阵 ( M ) 的左上部分:
1000030−20第二列和第三列的长度分别为:
- 第二列:02+02+32=3
- 第三列:02+(−2)2+02=2
这说明旋转操作之后同时有缩放操作:
- 在新的 y 轴方向缩放了3倍。
- 在新的 z 轴方向缩放了2倍。
- 而 x 轴的缩放因子是1(保持不变)。
因此可以得出,矩阵还包含了非均匀缩放,在 ( x, y, z ) 方向上的缩放因子分别为 ( 1, 2, 3 )。
4. 总结#
结合对旋转和缩放的分析,矩阵 M 的变换顺序是:
- 先绕 x 轴旋转 90°;
- 再在 ( x, y, z ) 方向分别进行非均匀缩放(缩放因子 ( 1, 2, 3 ))。
100000300−2000001=1000020000300001100000100−1000001First rotate 90 degrees around the x-axis
And then perform the non-uniform scaling around the x-, y-, and z-axes with factors 1, 2, and 3, respectively.