3D数学2-基础矩阵

05/09/2020


向量是标量的数组,矩阵则是向量的数组

矩阵的维度

  • 先行再列,4行3列表示:4 X 3 矩阵,例子如下

[ 1 2 3 4 5 6 7 8 9 10 11 12 ] \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \\ 10 & 11 & 12 \end{bmatrix}

  • 下标表示元素处于的位置
    [ m 11 m 12 m 21 m 22 ] \begin{bmatrix} m_{11} & m_{12} \\ m_{21} & m_{22} \end{bmatrix}

方阵

行数和列数相同的矩阵,例如 1 X 1, 2 X 2, 3 X 3 矩阵

  • 对角线元素和非对角线元素
    • 对角元素表示,下标列和行都相等,基本就是左上角到右下角那一条对角线
  • 对角矩阵:非对角元素都为0,例子如下
    [ 3 0 0 4 ] \begin{bmatrix} 3 & 0 \\ 0 &4 \end{bmatrix}
  • 单位矩阵,对角线元素为1,其他元素为0
    • 矩阵乘单位矩阵还是依然是原矩阵
      [ 1 0 0 1 ] \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}

向量作为矩阵使用

向量可以用矩阵表示,n维向量可以表示n X 1 或者 1 X n

转置

沿着矩阵对角线翻折, 公式如下:
M i j T = M j i M_{ij}^T=M_{ji}

  • 转置两次的矩阵等于自己, (MT)T = M
  • 任意对角矩阵(除了一条对角线,其他都是0),转置一次还是自己

矩阵乘法

  • 矩阵相乘需要匹配
  • 矩阵相乘不满足交换律: AB != BA
  • 满足交换律: (AB)CD = A(BC)D = (ABC)D 等等其他组合
  • 矩阵的倒置:(AB)T = BTAT

向量与矩阵的乘法

[ m 11 m 12 m 13 m 21 m 22 m 23 m 31 m 32 m 33 ] [ x y z ] = [ x m 11 + y m 12 + z m 13 x m 21 + y m 22 + z m 23 x m 31 + y m 32 + z m 33 ] \begin{bmatrix} m_{11} & m_{12} & m_{13}\\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \end{bmatrix} \begin{bmatrix} x \\ y \\ z \end{bmatrix} = \begin{bmatrix} xm_{11} +ym_{12} +zm_{13}\\ xm_{21} +ym_{22} +zm_{23} \\ xm_{31} +ym_{32} + zm_{33} \end{bmatrix}
[ x y z ] [ m 11 m 12 m 13 m 21 m 22 m 23 m 31 m 32 m 33 ] = [ x m 11 + y m 21 + z m 31 x m 12 + y m 22 + z m 33 x m 13 + y m 23 + z m 33 ] \begin{bmatrix} x & y & z \end{bmatrix} \begin{bmatrix} m_{11} & m_{12} & m_{13}\\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \end{bmatrix} = \begin{bmatrix} xm_{11}+ym_{21} +zm_{31}&xm_{12} +ym_{22} +zm_{33} &xm_{13} + ym_{23} + zm_{33} \end{bmatrix}

注意事项

  • 结果向量中的每个元素都是原向量与矩阵中单独行或列的点积
    比如:
    [ x y z ] [ m 11 m 21 m 31 ] = [ x m 11 + y m 21 + z m 31 ] \begin{bmatrix} x & y & z \end{bmatrix} \begin{bmatrix} m_{11 }\\ m_{21} \\ m_{31} \end{bmatrix} = \begin{bmatrix} xm_{11}+ym_{21} +zm_{31} \end{bmatrix}
  • 矩阵中的个元素决定了输入向量特定元素在输出向量中占的比重。如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]与任意矩阵相乘的变换:
[ 1 0 0 ] [ m 11 m 12 m 13 m 21 m 22 m 23 m 31 m 32 m 33 ] = [ m 11 m 12 m 13 ] \begin{bmatrix} 1 & 0 & 0 \end{bmatrix} \begin{bmatrix} m_{11} & m_{12} & m_{13}\\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \end{bmatrix} = \begin{bmatrix} m_{11}&m_{12} &m_{13} \end{bmatrix}
基向量[1,0,0]变换到了另一个向量。所以其他两个基向量分别受到矩阵另外两行的影响。

缩放

用k因子影响向量,现在讨论的是在原点上的缩放。
[ x y z ] [ m 11 m 12 m 13 m 21 m 22 m 23 m 31 m 32 m 33 ] = [ k x 0 0 ] \begin{bmatrix} x & y & z \end{bmatrix} \begin{bmatrix} m_{11} & m_{12} & m_{13}\\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \end{bmatrix} = \begin{bmatrix} kx&0 &0 \end{bmatrix}

问题

如何得到[kx,0,0]的结果?意味着在x轴对向量[x,y,z]拉伸.
[ k 0 0 0 0 0 0 0 0 ] \begin{bmatrix} k & 0 & 0\\ 0 & 0 & 0 \\ 0 &0 & 0 \end{bmatrix}
如何获得[kx,ky,kz]? k因子可以不同,表示不规则的缩放,如果是负数表示方向是反的。
[ k 0 0 0 k 0 0 0 k ] \begin{bmatrix} k & 0 & 0\\ 0 & k & 0 \\ 0 & 0 & k \end{bmatrix}

总结

  • 方阵的行能被解释为坐标系的基向量
  • 为了将向量从原坐标系变换到新坐标系,用它乘以一个矩阵

3DMath 第7章和第8章的矩阵内容

猜你喜欢

转载自blog.csdn.net/weixin_44200074/article/details/105969111