05/09/2020
向量是标量的数组,矩阵则是向量的数组
矩阵的维度
- 先行再列,4行3列表示:4 X 3 矩阵,例子如下
⎣⎢⎢⎡147102581136912⎦⎥⎥⎤
- 下标表示元素处于的位置
[m11m21m12m22]
方阵
行数和列数相同的矩阵,例如 1 X 1, 2 X 2, 3 X 3 矩阵
- 对角线元素和非对角线元素
- 对角元素表示,下标列和行都相等,基本就是左上角到右下角那一条对角线
- 对角矩阵:非对角元素都为0,例子如下
[3004]
- 单位矩阵,对角线元素为1,其他元素为0
- 矩阵乘单位矩阵还是依然是原矩阵
[1001]
向量作为矩阵使用
向量可以用矩阵表示,n维向量可以表示n X 1 或者 1 X n
转置
沿着矩阵对角线翻折, 公式如下:
MijT=Mji
- 转置两次的矩阵等于自己, (MT)T = M
- 任意对角矩阵(除了一条对角线,其他都是0),转置一次还是自己
矩阵乘法
- 矩阵相乘需要匹配
- 矩阵相乘不满足交换律: AB != BA
- 满足交换律: (AB)CD = A(BC)D = (ABC)D 等等其他组合
- 矩阵的倒置:(AB)T = BTAT
向量与矩阵的乘法
⎣⎡m11m21m31m12m22m32m13m23m33⎦⎤⎣⎡xyz⎦⎤=⎣⎡xm11+ym12+zm13xm21+ym22+zm23xm31+ym32+zm33⎦⎤
[xyz]⎣⎡m11m21m31m12m22m32m13m23m33⎦⎤=[xm11+ym21+zm31xm12+ym22+zm33xm13+ym23+zm33]
注意事项
- 结果向量中的每个元素都是原向量与矩阵中单独行或列的点积
比如:
[xyz]⎣⎡m11m21m31⎦⎤=[xm11+ym21+zm31]
- 矩阵中的个元素决定了输入向量特定元素在输出向量中占的比重。如m11决定了输入x对输出x值得贡献
- 分配率:(v+w)M = vM + wM ( v,w是向量,M是矩阵)
行向量与列向量的区别
- 各分量的结果完全不同
- 读法不一致
- vABC,行向量v从左到右分别被矩阵ABC转换
- CBAv,列向量v从右往左分别分矩阵ABC转换
- DirectX使用的行向量
矩阵的几何解释
如果把矩阵的行解释为坐标系的基向量,那么乘以该矩阵就相当于执行了一次坐标转换,若有aM = b, 我们就可以说,M将a转换到b,所以说乘法和转换是等价的
- 一个矩阵表示一个变换
- 矩阵的每一行表示为基向量,相当于对x,y,z轴就行变换。
比如:在空间中你有三个轴,x,y,z轴,假设基向量分别是[1,0,0],[0,1,0],[0,0,1]
先看一下[1,0,0]与任意矩阵相乘的变换:
[100]⎣⎡m11m21m31m12m22m32m13m23m33⎦⎤=[m11m12m13]
基向量[1,0,0]变换到了另一个向量。所以其他两个基向量分别受到矩阵另外两行的影响。
缩放
用k因子影响向量,现在讨论的是在原点上的缩放。
[xyz]⎣⎡m11m21m31m12m22m32m13m23m33⎦⎤=[kx00]
问题
如何得到[kx,0,0]的结果?意味着在x轴对向量[x,y,z]拉伸.
⎣⎡k00000000⎦⎤
如何获得[kx,ky,kz]? k因子可以不同,表示不规则的缩放,如果是负数表示方向是反的。
⎣⎡k000k000k⎦⎤
总结
- 方阵的行能被解释为坐标系的基向量
- 为了将向量从原坐标系变换到新坐标系,用它乘以一个矩阵
3DMath 第7章和第8章的矩阵内容