lecture-2
更新时间:2023-12-13阅读整篇大约10分钟
线性变换
线性变换是一种不包含平移的变换,它包含旋转和缩放,而包含平移的变换是仿射变换,也就是说线性变换一定是仿射变换,仿射变换不一定是线性变换
可以通过矩阵乘法实现的任何变换都是线性变换,需要注意的是,虽然平移变换使用矩阵乘法实现,但它不属于线性变换。因为它不满足线性变换的两个条件:一是对于任何两个向量 u
和 v
,以及任何两个常数 a
和 b
,都有 T(au+bv)=aT(u)+bT(v)
;二是对于任何向量 v
,都有 T(0)=0
,其中 0
表示零向量。
因此,虽然平移变换可以使用矩阵乘法实现,但它不是线性变换。
旋转
旋转是一种线性变换,这里讨论的是围绕着原点旋转的情况
例如存在着点P(x,y),绕着原点旋转θ°得到右下角的点P′(x’,y′),得到左上角的点P′′(x′’,y′′),那么有:[x′y′]=[acbd]∗[xy]即x’=a∗x+b∗yy′=c∗x+d∗y现在我们需要求得a、b、c、d由于旋转前后长度不会发生变化,并且每个点都应该满足相同的计算方式,所以旋转之后P’的长度为Px则P′x′为Px∗cos(θ),P′y′为Px∗sin(θ)对比上面公式,由于此时Py为0,所以发现a=cos(θ)c=sin(θ)同理对于P′′也应该有P′′y′′=Py∗cos(θ),P′′x′′=−Py∗sin(θ),此时Px为0,所以发现b=−sin(θ)d=cos(θ)故[acbd]=[cos(θ)sin(θ)−sin(θ)cos(θ)]这个即为旋转矩阵
对于三维旋转来说,旋转是发生在一个轴(Axis)上,而不是在一个点上,例如以围绕x轴为例,他的旋转矩阵可以表示为
⎣⎡1000cos(θ)−sin(θ)0sin(θ)cos(θ)⎦⎤
那么对于绕任意轴旋转来说,推导原理和二维差不多,得多做几条辅助线
⎣⎡nx2(1−cosθ)+cosθnxny(1−cosθ)−nzsinθnxnz(1−cosθ)+nysinθnxny(1−cosθ)+nzsinθny2(1−cosθ)+cosθnynz(1−cosθ)−nxsinθnxnz(1−cosθ)−nysinθnynz(1−cosθ)+nxsinθmz2(1−cosθ)+cosθ⎦⎤
缩放
我们缩放一个对象,希望其按比例增大或者缩小一个k的因子,我们要执行的是均匀缩放,统一的增加或减少一个k的因子,如果希望挤压或者拉伸物体,则可以在不同方向引用不同的比例因子以此达到不均匀缩放
不均匀缩放不会保留角度,二长度和体积、面积都会随着缩放的因子去进行改变,具体来说:
- 如果|k| < 1,则对象在那个方向会变得更短
- 如果|k| > 1,则对象在那个方向会变得更长
- 如果k = 0,那么将获得一个正交投影,例如投影到y平面,则3x3矩阵中最中间的那个值应当为0
- 如果k < 0,那么将获得一个反射的效果
沿主轴缩放
对于沿主轴缩放的缩放矩阵很简单
[xyz]∗⎣⎡kx000ky000Kz⎦⎤=[kxxkyykzz]围绕主轴缩放的三维矩阵:⎣⎡kx000ky000Kz⎦⎤
任意方向缩放
⎣⎡1+(k−1)nx2(k−1)nxny(k−1)nxnz(k−1)nxny1+(k−1)ny2(k−1)nynz(k−1)nxnz(k−1)nynz1+(k−1)nz2⎦⎤
正交投影
主轴或主平面投影
在主轴或者主平面投影只需要将所需投影的轴或者平面的值丢弃即可,例如点(4,5)投影到x轴之后的值为(4,0),三维点(4,5,6)投影到xz平面的值为(4,0,6)
任意平面或者轴投影
在之前缩放时有说过当k为0时,我们将获得一个正交投影,也即是将任意方向缩放的矩阵的k值设为0,即可得到
⎣⎡1+(0−1)nx2(0−1)nxny(0−1)nxnz(0−1)nxny1+(0−1)ny2(0−1)nynz(0−1)nxnz(0−1)nynz1+(0−1)nz2⎦⎤=⎣⎡1−nx2−nxny−nxnz−nxny1−ny2−nynz−nxnz−nynz1−nz2⎦⎤
反射
主轴或主平面反射
在主轴或者主平面投影只需要将所需投影的轴或者平面的值设置为相反值即可,例如点(4,5)经x轴反射之后的值为(4,-5),三维点(4,5,6)经z平面反射的值为(4,-5,6)
任意平面或者轴反射
以同大小的反射为例,之前缩放时有说过当k小于0时,我们将获得一个反射的效果,所以我们只需要对任意轴的缩放矩阵中的k设置为-1即可得到反射矩阵
⎣⎡1+(−1−1)nx2(−1−1)nxny(−1−1)nxnz(−1−1)nxny1+(−1−1)ny2(−1−1)nynz(−1−1)nxnz(−1−1)nynz1+(−1−1)nz2⎦⎤=⎣⎡1−2nx2−2nxny−2nxnz−2nxny1−2ny2−2nynz−2nxnz−2nynz1−2nz2⎦⎤
错切
在三维中,我们可以采用一个坐标并将该坐标的不同倍数添加到另外两个坐标上。例如符号Hxy
表示x坐标和y坐标按照另一个坐标z移动
Hxy(s,t)=⎣⎡10s01t001⎦⎤,Hxz(s,t)=⎣⎡1s00100t1⎦⎤,Hyz(s,t)=⎣⎡100s10t01⎦⎤
仿射变换
仿射变换是线性变换的超集,线性变换一定是仿射变换,仿射变换不一定是线性变换,仿射变换包含平移变换
可逆变换
存在着F的变换的逆变换,也即是“撤销”原始变换,则该变换是可逆的.对于仿射变换来说,分为线性变换和平移,平移我们可以简单的来平移相反的数量来撤销平移的变换,而对于线性变换,首先我们分析旋转变换,我们可以对其进行反方向相同的角度的变换而达到撤销的效果,所以旋转变换是可逆的,而对于缩放,也可以应用相反的数值以撤销,所以缩放变化是可逆的,反射、错切都应该是可逆的,而对于投影,我们知道,投影变换的时候,是对其一个分量或者一个轴直接丢弃,所以这些信息无法恢复,因此,除了投影之外的所有原始变换都是可逆的,由于任何线性变换都可以表示为乘以矩阵,因此找到原始变换的逆可以转变为找到矩阵的逆,而矩阵的逆以及是否可逆我们可以通过计算而去得到
如果矩阵没有逆,那么我们说它是奇异矩阵,并且变换是不可逆的,可逆矩阵的行列式是非零的,也即是如果矩阵的行列式为零,则可以表示该矩阵不可逆,变换也不可逆,是奇异的
保持角度的变换
如果两个矢量之间的角度在变换后的大小或方向上没有改变,则该变换就是保持角度的变换,只有平移旋转和均匀缩放才是保持角度的变换,保持角度的变换也将保持比例,反射可能变换前后角度的方向可能是相反的,所有保持角度的变换都是线性和仿射的
正交变换
刚体变换