Shader编程学习笔记(十五)—— 3D数学基础3 - 矩阵

18 篇文章 1 订阅
16 篇文章 1 订阅


1、引言

  这一篇主要了解矩阵的相关知识点,本篇涉及的知识点:

  • 矩阵的维度和记法
  • 矩阵的转置
  • 矩阵和标量的乘法
  • 矩阵和矩阵的乘法

2、矩阵

2.1、矩阵的维度和记法

3 × 2 3\times2 3×2的矩阵:
[ m 11 m 12 m 21 m 22 m 31 m 32 ] \begin{bmatrix} m_{11} & m_{12} \\ m_{21} & m_{22} \\ m_{31} & m_{32}\end{bmatrix} m11m21m31m12m22m32

3 × 3 3\times3 3×3的矩阵:
[ m 11 m 12 m 13 m 21 m 22 m 23 m 31 m 32 m 33 ] \begin{bmatrix} m_{11} & m_{12}& m_{13} \\ m_{21} & m_{22}& m_{23} \\ m_{31} & m_{32}& m_{33}\end{bmatrix} m11m21m31m12m22m32m13m23m33
矩阵的记法:
M = [ m 11 m 12 m 13 m 21 m 22 m 23 m 31 m 32 m 33 ] M = \begin{bmatrix} m_{11} & m_{12}& m_{13} \\ m_{21} & m_{22}& m_{23} \\ m_{31} & m_{32}& m_{33}\end{bmatrix} M=m11m21m31m12m22m32m13m23m33

当我们把矩阵当做数组使用的时候矩阵的 m 11 m_{11} m11元素就是数组M的第一个元素就是M[0][0]元素

2.2、矩阵的转置

[ 1 3 2 0 9 8 0 0 3 ] T = [ 1 0 0 3 9 0 2 8 3 ] \begin{bmatrix} 1& 3&2 \\ 0 &9& 8 \\ 0&0& 3\end{bmatrix}^T =\begin{bmatrix} 1& 0&0 \\ 3 &9& 0 \\ 2&8& 3\end{bmatrix} 100390283T=132098003

矩阵的转置就是把矩阵的行变为矩阵的列就得到这个矩阵的转置。如果再次转置就可以得到原矩阵。

M T T = M {M^T}^T= M MTT=M,矩阵的转置的转置等于矩阵本身

向量也可以当做一个矩阵,只是列数和行数较少,eg:
[ x y z ] T = [ x y z ] \begin{bmatrix} x& y&z \end{bmatrix}^T =\begin{bmatrix} x \\y\\ z\end{bmatrix} [xyz]T=xyz

2.3、矩阵和标量的乘法

[ 1 3 2 0 9 8 0 0 3 ] × 3 = 3 × [ 1 3 2 0 9 8 0 0 3 ] = [ 3 0 0 9 27 0 6 24 9 ] \begin{bmatrix} 1& 3&2 \\ 0 &9& 8 \\ 0&0& 3\end{bmatrix}\times3=3\times\begin{bmatrix} 1& 3&2 \\ 0 &9& 8 \\ 0&0& 3\end{bmatrix}=\begin{bmatrix} 3& 0&0\\ 9 &27& 0 \\ 6&24& 9\end{bmatrix} 100390283×3=3×100390283=39602724009

矩阵和标量相乘就等于矩阵的每一个元素和标量相乘得到一个新的矩阵

2.4、 矩阵和矩阵的乘法

[ 3 0 2 1 7 0 2 8 1 ] × [ 4 7 1 2 2 3 0 1 0 ] = [ 3 × 4 + 0 × 2 + 2 × 0 3 × 7 + 0 × 2 + 2 × 1 3 × 1 + 0 × 3 + 2 × 0 1 × 4 + 7 × 2 + 0 × 0 1 × 7 + 7 × 2 + 0 × 1 1 × 1 + 7 × 3 + 0 × 0 2 × 4 + 8 × 2 + 1 × 0 2 × 7 + 8 × 2 + 1 × 1 2 × 1 + 8 × 3 + 1 × 0 ] = [ 12 23 3 18 21 22 24 31 26 ] \begin{bmatrix} 3& 0&2 \\ 1 &7&0\\ 2&8& 1\end{bmatrix}\times\begin{bmatrix} 4&7&1 \\ 2 &2&3\\ 0&1& 0\end{bmatrix}=\begin{bmatrix} 3\times4+0\times2+2\times0& 3\times7+0\times2+2\times1&3\times1+0\times3+2\times0 \\ 1\times4+7\times2+0\times0 &1\times7+7\times2+0\times1& 1\times1+7\times3+0\times0 \\ 2\times4+8\times2+1\times0&2\times7+8\times2+1\times1& 2\times1+8\times3+1\times0\end{bmatrix}=\begin{bmatrix}12& 23&3\\ 18 &21& 22 \\ 24&31& 26\end{bmatrix} 312078201×420721130=3×4+0×2+2×01×4+7×2+0×02×4+8×2+1×03×7+0×2+2×11×7+7×2+0×12×7+8×2+1×13×1+0×3+2×01×1+7×3+0×02×1+8×3+1×0=12182423213132226

我们观察上述运算过程可以发现:结果矩阵中左上角的第一个元素是通过第一个矩阵的第一行和第二个矩阵的第一列相乘而得到的,其他的以此类推即可得到结果。
矩阵和矩阵的乘法是有顺序的,我们调整两个矩阵的顺序得到的结果是不同的,左乘和是不同的

设有矩阵M、N,MN有如下关系:

M × N = T M \times N=T M×N=T
N T × M T = k N^T \times M^T = k NT×MT=k
T T = k T^T = k TT=k

eg:
  下面两个矩阵是不能相乘的:
[ 3 2 1 0 2 1 ] × [ 4 7 1 2 2 3 0 1 0 ] = ? ? \xcancel{\begin{bmatrix} 3& 2 \\ 1 &0\\ 2& 1\end{bmatrix}\times\begin{bmatrix} 4&7&1 \\ 2 &2&3\\ 0&1& 0\end{bmatrix}=??} 312201×420721130=??
  下面两个矩阵是可以相乘的:
[ 3 1 2 2 0 1 ] × [ 4 7 1 2 2 3 0 1 0 ] = ? ? \begin{bmatrix} 3& 1 &2 \\ 2& 0&1\end{bmatrix}\times\begin{bmatrix} 4&7&1 \\ 2 &2&3\\ 0&1& 0\end{bmatrix}=?? [321021]×420721130=??

结论

在这里插入图片描述
如果 M = S M = S M=S则两个矩阵可以相乘相乘的结果是一个 N × T N \times T N×T阶的矩阵,否则不可以相乘。

eg:
[ 2 0 1 ] × [ 4 7 1 2 2 3 0 1 0 ] = ? ? \xcancel{\begin{bmatrix} 2\\ 0 \\ 1\end{bmatrix}\times\begin{bmatrix} 4&7&1 \\ 2 &2&3\\ 0&1& 0\end{bmatrix}=??} 201×420721130=??
  由于 M = S M \cancel{=} S M= S所以上面的两个矩阵不能相乘。
[ 4 7 1 2 2 3 0 1 0 ] × [ 2 0 1 ] = [ 9 7 0 ] \begin{bmatrix} 4&7&1 \\ 2 &2&3\\ 0&1& 0\end{bmatrix}\times\begin{bmatrix} 2\\ 0 \\ 1\end{bmatrix}=\begin{bmatrix} 9\\ 7 \\ 0\end{bmatrix} 420721130×201=970
[ 2 0 1 ] × [ 4 7 1 2 2 3 0 1 0 ] = [ 8 15 2 ] \begin{bmatrix} 2&0 & 1\\ \end{bmatrix}\times\begin{bmatrix} 4&7&1 \\ 2 &2&3\\ 0&1& 0\end{bmatrix}=\begin{bmatrix} 8&15 & 2\\ \end{bmatrix} [201]×420721130=[8152]
[ 4 2 0 7 2 1 1 0 3 ] × [ 2 0 1 ] = [ 8 15 2 ] \begin{bmatrix} 4&2&0\\ 7&2&1\\ 1&0&3\end{bmatrix}\times\begin{bmatrix} 2\\ 0\\ 1\end{bmatrix}=\begin{bmatrix} 8\\ 15 \\ 2\end{bmatrix} 471220013×201=8152
这里体现了:

细心的朋友发现当我们把两个矩阵的顺序对调并且把他们的矩阵转置,这两个对调的矩阵的转置矩阵相乘和原来的两个矩阵相乘得到的结果是一样的,或者说这两个结果一个是另一个的转置矩阵。

2.5、 单位矩阵

[ 1 0 0 0 1 0 0 0 1 ] × [ 3 2 5 ] = [ 3 2 5 ] \begin{bmatrix} 1&0&0\\ 0&1&0\\ 0&0&1\end{bmatrix}\times\begin{bmatrix} 3\\ 2\\5\end{bmatrix}=\begin{bmatrix} 3\\ 2 \\ 5\end{bmatrix} 100010001×325=325
  这里我们把左上角至右下角的元素连线称为主对角线。如果主对角线上的元素值都为1,其余的元素都为0,我们把这样的矩阵称为单位矩阵

单位矩阵和其他矩阵相乘不会改变那个矩阵,结果还是那个矩阵。

3、结束语


The End
  好了,今天的分享就到这里,如有不足之处,还望大家及时指正,随时欢迎探讨交流!!!


喜欢的朋友们,请帮顶、点赞、评论!您的肯定是我写作的不竭动力!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

对酒当歌﹏✍

您的鼓励是我写作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值