本章所写都是通过对《工程学线性代数》和《3D数学基础:图形与游戏开发》理解所写
“不幸的是,没人告诉您矩阵像什么——您必须自己去感受。” 来自《黑客帝国》对白 .我们曾宣称矩阵表达坐标转换,多以当我们观察矩阵的时候,我们是在观察转换,观察新的坐标系。打这个转换开起来像什么?特定的3D矩阵(旋转,放射等)和3X3矩阵的9个数字之间有什么关系?怎么样构建一个矩阵来做这个转换(而不是盲目的照搬书上的公式)?——3D数学基础
矩阵分为实矩阵和复矩阵,元素是实数的矩阵为实矩阵,元素是复数的为复矩阵。
关于复数:http://www.cnblogs.com/ThreeThousandBigWorld/archive/2012/07/21/2602588.html
单位矩阵我们记做E
转置矩阵:
用 ' 表示转置因为右上角的小t打不出来,a为实数
1)(A')' = A;
2) (A+B)' = A' + B';
3) (aA)' = aA';
4) (AB)' = B'A'.
由n阶方阵A的元素所构成的行列式(个元素的位置不变),称为方阵A的行列式,记做|A|或detA
1)|A'| = |A|
2) |aA| = a^n|A|
3) |AB| = |A||B|
伴随矩阵:
行列式|A|的各个元素的代数余子式Aij所构成的矩阵然后再转置就是矩阵A的伴随矩阵,记做A*
AA* = A*A = |A|E 这个定理与后面的逆矩阵相关
逆矩阵:
设X,Y,A皆为矩阵,他们之间的关系为 Y= AX
以A的伴随矩阵A* 左乘上式的两端,并根据伴随矩阵公式,可得
A*Y = A*AX
化简地:
A*Y = |A|X
当|A| ≠ 0时,可解出
X = (1/|A|)A*Y
记做B = (1/|A|)A*,上式可记做
X= BY,表示一个从Y到X的线性变换,称为X到Y的逆变换
根据 Y= AX 和 X= BY,我们可得
Y = A(BY) = (AB)Y
所以: AB = E, 注:E为单位矩阵
X = B(AX) = (BA)X ,注:矩阵一般不满足乘法交换律
所以: BA = E
由此:我们定义逆矩阵,对于n阶矩阵A,如果有一个n阶矩阵B,使 AB=BA=E,侧说矩阵A式可逆的,并把矩阵B称为A的逆矩阵,简称逆矩阵,记做 A^-1
定理:
1.若矩阵A可逆,则|A| ≠ 0
2.若矩阵|A|≠0,则A可逆,且 A^-1 = (1/|A|)A*
矩阵A的逆矩阵是唯一的,证:若 矩阵B,C都是A的逆矩阵,则有 B = BE = B(AC) = (BA)C = EC = C
结论:
1):若A可逆,则A^-1亦可逆,且(A^-1)^-1 = A
2):若A可逆, 数a≠0,则aA可逆,且(aA)^-1 = (1/a)A^-1
3):若A,B为同阶矩阵且均可逆,AB亦可逆,且 (AB)^-1 = B^-1 A^-1
4):若A可逆,则A'1(A的转置)亦可逆,且(A')^-1 = (A^-1)' 证:A'(A^-1)' = E, (A^-1 A)' = E'=E 所以(A')^-1 = (A^-1)'
当A可逆时,还可以定义:A^0 = E,A^-k = (A^-1)^k 所以 A^aA^b = A^(a+b), (A^a)^b = A^(ab)
3 X 3的矩阵:
| m_11 m_12 m_13 |
[1,0,0] | m_21 m_22 m_23 | = [ m_11 m_12 m_13]
| m_31 m_32 m_33 |
| m_11 m_12 m_13 |
[0,1,0] | m_21 m_22 m_23 | = [ m_21 m_22 m_23]
| m_31 m_32 m_33 |
| m_11 m_12 m_13 |
[0,0,1] | m_21 m_22 m_23 | = [ m_31 m_32 m_33]
| m_31 m_32 m_33 |
矩阵的每一行都可以解释为转换后的基向量(就是把x轴,y轴变换成上面对应的行).
对上面的加深,上面3X3矩阵可以定义为一个三维向量空间,根据向量空间的定义:如果在向量空间V中取定一个基a1,a2,....an那么V中任一向量x可唯一的表示为 x =K1a1+K2a2+.......+Knan,
数组K1,K2,K3,Kn称为向量x在基a1,a2,....an中的坐标。(很显然就是在向量空间V各个基向量上面的移动量)
我们知道,在世界坐标系(其实就是最大的向量空间V)中点P(x,y,z)其实是沿着坐标系的各个基向量移动距离的和,P= K1*(1,0,0)+K2*(0,1,0)+K3*(0,0,1)因为坐标系的基坐标是单位向量,所以这里各个方向的移动量K1,K2,K3等于点P中的x,y,z,当然世界坐标系中的任何一点P它的移动量就是它坐标,所以当我们的坐标系改变时就有Q=P.x*(A11,A12,A13) + P.y*(A21,A22,A23) + P.z*(A31,A32,A33)这里变换后的Q任然是在世界坐标系中的点,这整个过程其实就是沿着某个坐标系(也可说是向量空间)各个基向量移动K1,K2,K3.....Kn个单位后在世界坐标系中的位置。
特别的,在n维向量空间R^n中去单位向量为基,则以K1,K2,K3....Kn为分量的向量x,可表示为 x = K1e1+K2e2+K3e3+......+Knen,可见向量在基e1,e2,e3,.....en 中的坐标就是该向量的分量。因此e1,e2,e3....en叫做自然基。
我们可以看出如果矩阵A各行都为单位向量时,向量P乘以矩阵A其实就是就是 P.x*(A11,A12,A13) + P.y*(A21,A22,A23) + P.z*(A31,A32,A33),如此可以看出坐标变换就是P沿着A的各行向量移动之和。
特别的,如果矩阵各行不是单位向量那么这个矩阵具有缩放性。
经典例题:
在R^3中取定一个基a1,a2,a3,在取一个新基b1,b2,b3,这A=(a1,a2,a3),B=(b1,b2,b3)。求用A表示B的表示式(基变换公式),并求向量在这两个基中的坐标之间的关系式(坐标变换公式)。
解:
A=EA,E=AA^1 注:E为单位矩阵
B=EB=AA^-1B
基变换公式为 B=AP, 其中表示是的系数矩阵P=A^-1B称为从旧基到新基的过渡矩阵。
设向量X在旧基和新基中的坐标分别为y1,y2,y3和z1,z2,z3,即
x=[y1,y2,y3]*A x=[z1,z2,z3]*B
得 [z1,z2,z3] =[y1,y2,y3]*B^-1A
即: [z1,z2,z3] =[y1,y2,y3]*P
几种常用的矩阵:一下矩阵矩阵在<3D数学基础>上有详细的几何解释
旋转矩阵:
2D : R(O) = cos sin
-sin cos
3D :
1 0 0 | cos 0 –sin | cos sin 0 | |||||
Rx(O)= | 0 cos sin | Ry(O)= | 1 0 0 | Rz(O)= | –sin cos 0 | ||
0 –sin cos | sin 0 cos | 0 0 1 |
任意轴:
推导公式挺麻烦的不写了,注重过程 《3D数学基础:图形与开发》8.2.3章节
v` = (v-(vn))cos + (n*v)sin + (vn)n
n为旋转轴,单位向量,v为变换前的基向量,v`为变换后的基向量。绕n旋转后的 x,y,z为:
x` = (x-(xn))cos + (n*x)sin + (xn)n
y` = (y-(yn))cos + (n*y)sin + (yn)n
z` = (z-(zn))cos + (n*z)sin + (zn)n
所以绕任意轴旋转的矩阵为:
(x-(xn))cos + (n*x)sin + (xn)n
(y-(yn))cos + (n*y)sin + (yn)n
(z-(zn))cos + (n*z)sin + (zn)n
缩放矩阵:
如果在各个方向上应用同比例的缩放,并且沿着原点“膨胀”物体,那么就是均匀缩放。
如果需要“挤压”或“拉伸”物体,在不同的方向应用不同的因子即可,这称作非均匀缩放。
如果缩放因子k,|k|<1物体将“变短”; 如果|k|>1,物体“变长”。如果k=0,就是正交投影,如果|k|<0,就是镜像。
2D | |
S(Kx,Ky) = | Kx 0 |
0 Ky | |
3D | Kx 0 0 |
S(Kx,Ky,Kz) = | 0 Ky 0 |
0 0 Kz | |
任意轴:
与上面旋转矩阵相似 ,推导公式挺麻烦的不写了,注重过程 《3D数学基础:图形与开发》8.3章节
v` = v+(k-1)(vn)n, n为缩放轴,单位向量,v为缩放向量,k为缩放因子。
n缩放轴单位向量,k缩放因子 | |||
1+(k-1)n,x^2 | (k-1)n.x*n.y | (k-1)n.x*n.z | |
R(n,k) = | (k-1)n.x*n.y | 1+(k-1)n.y^2 | (k-1)n.y*n.z |
(k-1)n.z*n.x | (k-1)n.z*n.y | 1+(k-1)n.z*2 |
正交投影:
一般来说,投影意味着降维操作。有一种投影方法是在某个方向上用零做为缩放因子。
这种情况下,所有点都被拉平至垂直的轴(2D)或平面(3D)上。这种类型的投影称作正交投影,
或者平行投影,因为从原来点到投影点的直线互相平行。还有一种投影叫透视投影。
2D | |||||
X轴上的投影 | Y轴上的投影 | ||||
S([0 1],0) = | 1 0 | S([1 0],0) = | 0 0 | ||
0 0 | 0 1 |
3D | ||||||||
XY平面 | XZ平面 | YZ平面 | ||||||
1 0 0 | 1 0 0 | 0 0 0 | ||||||
S([0 0 1],0) = | 0 1 0 | S([0 1 0],0)= | 0 0 0 | S([1 0 0],0)= | 0 1 0 | |||
0 0 0 | 0 0 1 | 0 0 1 |
镜像:
镜像(也叫作反射)是一种变换,其作用是将物体沿直线(2D中)或平面(3D中)“翻折”。
利用缩放矩阵和缩放因子(k=-1)很容易实现镜像,设n为2D单位向量,该矩阵将沿通过原点且垂直于n的发射轴来进行镜像变换。
沿任意轴镜像的2D矩阵: | |
S(n,-1)= | 1-2*.x^2 -2*n.x*n,y |
-2*n.xn,y 1-2*n.y^2 |
沿任意轴镜像的3D矩阵: | |
1-2n.x^2 -2n.x*n.y -2n.x*n.z | |
S(n,-1)= | -2n.x*n.y 1-2n.y^2 -2n.y*n.z |
-2n.x*n.z -2n.z*n.y 1-2n.z^2 |
切变:
切变是一种坐标系“扭曲”变换,非均匀的拉伸它。切变的时候角度会发生变化,但面积和体积保持不变。
切变是一种很少用到的变换,它也被称为扭曲变换。
记法Hx的意义是x(或y)坐标根据坐标y(或x)被切变,参数s控制着切变的方向和量。
x` = x + sy
2D | |||
Hx(s)= | 1 0 | Hy(s) = | 1 s |
s 1 | 0 1 |
3D中的切变方法是取出一个坐标,乘以不同因子再加到其他两个坐标上。记法Hx的意义是x,y坐标被坐标z改变。
x` = x + sz y` = y + tz
3D | |||||||
1 0 0 | 1 0 0 | 1 s t | |||||
Hxy(s,t)= | 0 1 0 | Hxz(s,t)= | s 1 0 | Hyz(s,t)= | 0 1 0 | ||
s t 1 | 0 0 1 | 0 0 1 |
矩阵变换的组合:
矩阵组合是用了矩阵乘法的结合律。
几何意义根据: 矩阵的行向量就是变换后的基向量。这在多个变换的情况下也成立的。
设有矩阵A,B,其中矩阵A行为a1,a2,a3,那么根据矩阵乘法AB,结果中的每一行都是A中相应行与矩阵B相乘的结果。
A = | a1 a2 a3 | A*B= | a1 a2 * B a3 | a1 * B = a2 * B a3 * B |
变换分类:
线性变换:
F(a+b) = F(a)+F(b)以及F(ka)=kF(a)
如果满足上式我们就认为是线性变换。
放射变换:
可逆变换:
等角变换:
正交变换:
刚体变换:
正交矩阵:
若果方阵M是正交的,则当且仅当M与他的转置矩阵M^t的乘积等于单位矩阵。
M正交<=>MM^t = I I为单位矩阵
我们知道MM^-1 = I 所以如果M正交那么 M^-1 = M^t M的逆矩阵等于M的转置矩阵
当且仅当一个向量是单位向量时,他与她自身的点积结果是1,当且仅当两个向量互相垂直时,他们的点积为零。
如果一个矩阵是正交的它必须满足:
矩阵的每一行都是单位矩阵。
矩阵的所有行互相垂直。
如果M是正交那么m ^t也是正交.
例子:旋转矩阵,镜像矩阵是正交矩阵.
矩阵正交化:
利用施密特正交化:
R1=r1
R2= r2 – ( (r2 · R1)/(R1 · R1) )R1
R3= r3 – ( (r3 · R1)/(R1 · R1) )R1 – ( (r3 · R2)/(R2 · R2) )R2
现在 R1,R2,R3互相垂直了所以他们是一组正交基,但他们可能不是单位向量所以还要单位化,如果在矫正之前就单位化那就可以避免除法.
施密特正交化偏差的,这取决于基向量列出的顺序. 改进新:
R1= r1 – K( (r1 · r2)/(r2 · r2) )r2 -k( (r1 · r3)/(r3 · r3) )r3
R2= r2 – K( (r2 · r1)/(r1 · r1) )r1 -k( (r2 · r3)/(r3 · r3) )r3
R3= r3 – K( (r3 · r1)/(r1 · r1) )r1 -k( (r3 · r2)/(r2 · r2) )r2
要得到完美的结果,就得选择一个适当的因子k并迭代足够多的次数(如,10次).接着进行单位化,最后就会得到一句标准正交基。
4X4齐次矩阵:
混合积公式:
|a b c| = a * b · c = -a * c · b
来源:https://www.cnblogs.com/ThreeThousandBigWorld/archive/2012/07/21/2602537.html