本章主题:几何变换
旋转,平移,缩放,投影
6.1二维线性变换 (2D Linear Transformations)
线性变换
6.1.1缩放(scaling)
6.1.2剪切(shearing)
6.1.3旋转(rotation)
6.1.4反射(reflection)
6.1.5变换的组合和分解(composition and decomposition of transformations)
注意变换的顺序
6.1.6变换的分解(decomposition of transformations)
对特征值的分解Symmetric Eigenvalue Decomposition
对称矩阵总是可以使用特征值分解
A = RS *R的转置
其中 R 是正交矩阵,S 是对角矩阵; 我们将 R 的列(特征向量)命名为 v1 和 v2,我们将 S 的对角元素(特征值)命名为 λ1 和 λ2
例子
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ppFukuC5-1625968208939)(C:\Users\xingge\AppData\Roaming\Typora\typora-user-images\image-20210627114426543.png)]
奇异值分解Singular Value Decomposition
非对称矩阵也有相似的分解
A = US* V的转置
-
将 v1 和 v2 旋转到 x 和 y 轴(V的转置变换)。
-
在 x 和 y 中按 (σ1, σ2) 缩放(S 的变换)。
-
将 x 轴和 y 轴旋转到 u1 和 u2(U 的变换)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VQSZ8QF2-1625968208940)(C:\Users\xingge\AppData\Roaming\Typora\typora-user-images\image-20210628111621340.png)]
旋转路径的分解Paeth Decomposition of Rotations
6.2 3D线性变换
3D线性变换是2D线性变换的一个拓展
6.2.1任意3D旋转
6.2.2法线变换
t为曲面切线 n为法线
式子:
n
T
∗
t
=
0
n^{T} * t = 0
nT∗t=0
如果该曲线同过变换矩阵M 将t和n得到变换的后的 Mn法线和 Mt切线 ,但这两个向量不会互相垂直
所以本小节的目的是寻找曲线变换后的法线Nn
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8CksCl1S-1625968208940)(C:\Users\xingge\AppData\Roaming\Typora\typora-user-images\image-20210711084936239.png)]
即目的是
N
n
T
∗
M
t
=
0
Nn^{T} * Mt = 0
NnT∗Mt=0
首先 插入单位矩阵 I= M^-1 * M; 得出
n
T
∗
t
=
n
T
I
t
=
n
T
M
−
1
M
t
=
0
n^{T} * t = n^{T}It = n^{T}M^{-1}Mt=0
nT∗t=nTIt=nTM−1Mt=0
然后添加括号
(
n
T
M
−
1
)
(
M
t
)
=
(
n
T
M
−
1
)
M
t
=
0
(n^{T}M^{-1})(Mt)= (n^{T}M^{-1}) Mt = 0
(nTM−1)(Mt)=(nTM−1)Mt=0
M*t 为变换后的切线Mt
所以
N
n
T
=
n
T
M
−
1
Nn^{T} = n^{T}M^{-1}
NnT=nTM−1
N n = ( n T M − 1 ) T = ( M − 1 ) T n Nn = (n^{T}M^{-1}) ^ {T} = (M^{-1})^{T}n Nn=(nTM−1)T=(M−1)Tn
如果在opengl的glsl中可以表示
Normal = mat3(transpose(inverse(M))) * aNormal
6.3平移和仿射变换
引入w分量来表示平移,这样旋转和平移都可以表示在同一个矩阵中,齐次坐标
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZeV2kUxI-1625968208941)(C:\Users\xingge\AppData\Roaming\Typora\typora-user-images\image-20210711092532295.png)]
如果w = 0 这表示这是个向量
如果w 不为0 表示为一个点
6.4变换矩阵的逆
6.5坐标变换
矩阵中,齐次坐标
[外链图片转存中…(img-ZeV2kUxI-1625968208941)]
如果w = 0 这表示这是个向量
如果w 不为0 表示为一个点
6.4变换矩阵的逆
6.5坐标变换