2D Linear Transformations
可以使用一个 2 ✖ 2 矩阵对一个2维向量进行坐标变换:
Scaling
Shearing
Rotation
注意:旋转矩阵为正交矩阵,故其逆矩阵就为其转置矩阵,旋转 θ 角度的旋转矩阵的逆矩阵其实就是旋转 - θ 角度。
Reflection
Decomposition of Transformations
Symmetric Eigenvalue Decomposition:A = RSRT
如下为一个例子:
Singular Value Decomposition:A = USVT
奇异值分解博客可以看这篇:奇异值分解
如下为一个例子:
Homogeneous Coordinates
对于线性变换而言,它可以很好的表示缩放、旋转,但是无法表示平移:
用矩阵表示如下:
解决上述问题可以通过增加一个维度(使用齐次坐标):
- 点 (x, y) 表示为 (x, y, 1)
- 向量 [x, y]T 表示为 [x, y, 0]T
这种类型的变换叫做仿射变换:仿射变换(affine transformation) = 线性变换 + 平移
需注意如下4点:
rigid-body transforms:由平移和旋转组成的变换,不存在拉伸和剪切变换。
3D Transformations
3D 变换其实就是在2D变换的基础上增加了一个维度,同样使用齐次坐标:
- 点 (x, y, z) 表示为 (x, y, z, 1)
- 向量 [x, y, z]T 表示为 [x, y, z, 0]T
Transforming Normal Vectors
如果对物体进行了仿射(affine)变换,变换矩阵为 M ,那么它的法向量的变换矩阵是 M 的逆的转置:(M-1)T
虽然法向量不垂直了,但是切向量依旧平行于表面,故而可以根据切向量来求表换后的法向量。如下图所示:
不妨这样来看,对于有着法向量 n = [A, B, C]T 并且过原点的平面其上的点 P(x, y, z) 满足方程 Ax + By + Cz = 0,即 nT· P = 0
矩阵形式为:
因为 n 是向量, P 是点,所以如上补上 0 和 1。
进一步该矩阵可以写成:
其中 MP 可以看作是变换后的点,那么就有 nTM-1 垂直于变换后的点,这就是变换后的法向量的转置,所以转置后的法向量为:
所以变换法向量所用的矩阵为 (M-1)T。上述提到的为仿射变换,平移、旋转、缩放都不会影响法向量,但是透视投影会,因为它不是线性变换。
Exercises
Ex1
Ex2
Ex3
Ex4
Ex5
Ex6
Ex7
同Ex6
Ex8
绕原点逆时针旋转90度,然后平移[1, 1]
Ex9
可以先将点平移到原点,接着旋转θ角度,最后再平移回去
Ex10
根据欧拉角来转换
Ex11
将α,β,γ都变为2π- θ