1.1 缩放(Scale)
缩放变换是一种沿着坐标轴的变换,定义如下:
[Sx00Sy](Scale Matrix)
即除了(0,0)T保持不变之外,其他所有点都变成(SxX,SyY)T

1.2 切变(Shear)
切变是将物体的一边固定住,然后去拉另外一边,也就是
[10a1](Shear-x(a) Matrix)
[1a01](Shear-y(a) Matrix)

1.3 旋转(rotation)
此处的旋转是逆时针旋转,并且其旋转中心是原点,直接给出定义和推导过程
[cosθsinθ−sinθcosθ](Rotation Matrix)
推导过程:


1.4 2维绕任意点旋转
例如我们绕旋转的点为c
- 将点c作Translate转移到原点
- 作旋转
- 使用Translate的逆矩阵将其转移回去
即T(c)⋅R(α)⋅T(−c)

2 3D线性变换
2.1 3维缩放,切变和旋转
缩放还是和2D一个套路
⎣⎢⎡Sx000Sy000Sz⎦⎥⎤
切变也一样
⎣⎢⎡100dy10dz01⎦⎥⎤(Shear-x(dydz) Matrix)
再来到三维的旋转,有三个矩阵,分别对应绕x轴,y轴和z轴旋转,注意是右手系,绕z轴(x轴转向y轴),绕x轴(y轴转向z轴),绕y轴(z轴转向x轴)
⎣⎢⎡cosθsinθ0−sinθcosθ0001⎦⎥⎤(rotate-z(θ))
⎣⎢⎡1000cosθsinθ0−sinθcosθ⎦⎥⎤(rotate-x(θ))
⎣⎢⎡cosθ0−sinθ010sinθ0cosθ⎦⎥⎤(rotate-y(θ))
由此可知,所有的旋转矩阵都是正交矩阵,即它们的逆矩阵也就是它们的转置矩阵
注意,我们此处的绕y旋转的旋转矩阵为什么是负号在左下角呢,用叉乘的性质就可以解释,比如x×y=z,y×z=x,z×x=y,我们不难看出,像是一个xyz的循环,但是我们计算的时候都是先算x坐标再算z坐标,与叉乘的顺序相反了,所以是反的
3 仿射变换
最后只剩了一个位移,为了使位移的表示统一且方便,我们引入了齐次坐标,例如三维的齐次坐标矩阵为四维:
[xyz1]T(point)
[xyz0]T(vector)
对vector的位移是毫无意义的,方向始终不会变
3.1 位移(translation)
对一个三维的点作位移变换:
⎣⎢⎢⎢⎡x′y′z′1⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡100001000010xtytzt1⎦⎥⎥⎥⎤⎣⎢⎢⎢⎡xyz1⎦⎥⎥⎥⎤
参考文档:https://blog.csdn.net/qq_38065509/article/details/105156501