3D数学常用的矩阵公式总结

这篇文章主要是一些矩阵\(\begin{bmatrix} matrix \end{bmatrix}\)公式的总结,为了书写这些麻烦的公式,我去学习了LaTex的一些使用技巧,看上去效果还不错。

由于使用了LaTex语法,LaTex代码在MathJax的JS脚本渲染后,所显示的数学公式在电脑上兼容性很好,但在一些手机浏览器上兼容性不好。在手机上无法自适应页面,一些较长的公式可能无法看到全部,所以本文建议在电脑上看。

1. 2D旋转矩阵:\[R(\theta )=\begin{bmatrix} {p}’\\ {q}’ \end{bmatrix}=\begin{bmatrix} cos\theta &sin\theta \\ -sin\theta & cos\theta \end{bmatrix}\]
2. 绕x轴旋转的3D旋转矩阵:\[R_{x}(\theta )=\begin{bmatrix} {p}’\\ {q}’\\ {r}’ \end{bmatrix}=\begin{bmatrix} 1 &0 &0\\ 0 &cos\theta &sin\theta\\ 0 &-sin\theta &cos\theta \end{bmatrix}\]
3. 绕y轴旋转的3D旋转矩阵:\[R_{y}(\theta )=\begin{bmatrix} {p}’\\ {q}’\\ {r}’ \end{bmatrix}=\begin{bmatrix} cos\theta &0 &-sin\theta\\ 0 &1 &0\\ sin\theta &0 &cos\theta \end{bmatrix}\]
4. 绕z轴旋转的3D旋转矩阵:\[R_{z}(\theta )=\begin{bmatrix} {p}’\\ {q}’\\ {r}’ \end{bmatrix}=\begin{bmatrix} cos\theta &sin\theta &0\\ -sin\theta &cos\theta &0\\ 0 &0 &1 \end{bmatrix}\]
5. 沿坐标轴的2D缩放矩阵(k为缩放因子):\[S(k_{x},k_{y})=\begin{bmatrix} {p}’\\ {q}’ \end{bmatrix}=\begin{bmatrix} k_{x} &0 \\ 0&k_{y} \end{bmatrix}\]
6. 沿坐标轴的3D缩放矩阵:\[S(k_{x},k_{y},k_{z})=\begin{bmatrix} k_{x} &0 &0 \\ 0& k_{y} &0 \\ 0&0 &k_{z} \end{bmatrix}\]
通过使垂直方向上的缩放因子为0,就能向坐标轴或平面投影:
7. 向任意直线投影的2D矩阵:\[P(n)=S(n,0)=\begin{bmatrix} 1-n_{x}^{2} &-n_{x}n_{y} \\ -n_{x}n_{y}& 1-n_{y}^{2} \end{bmatrix}\]
8. 向任意平面投影的3D矩阵:\[P(n)=S(n,0)=\begin{bmatrix} 1-n_{x}^{2}&-n_{x}n_{y} &-n_{x}n_{z} \\ -n_{x}n_{y}& 1-n_{y}^{2} &-n_{y}n_{z} \\ -n_{x}n_{z}&-n_{z}n_{y} & 1-n_{z}^{2} \end{bmatrix}\]
使缩放因子为-1能够很容易的实现镜像变换:
9. 沿任意轴镜像的2D矩阵:\[P(n)=S(n,-1)=\begin{bmatrix} 1-2n_{x}^{2} &-2n_{x}n_{y} \\ -2n_{x}n_{y} & 1-2n_{y}^{2} \end{bmatrix}\]
10. 沿任意轴镜像的3D矩阵:\[P(n)=S(n,-1)=\begin{bmatrix} 1-2n_{x}^{2} &-2n_{x}n_{y} &-2n_{x}n_{z} \\ -2n_{x}n_{y}& 1-2n_{y}^{2} &-2n_{y}n_{z} \\ -2n_{x}n_{z}& -2n_{z}n_{y}& 1-2n_{z}^{2} \end{bmatrix}\]
11. 2X2矩阵的行列式:\[|M|=\begin{vmatrix} m_{11} & m_{12}\\ m_{21}& m_{22} \end{vmatrix}=m_{11}m_{22}-m_{12}m_{21}\]
12. 3X3矩阵的行列式:\[\begin{bmatrix} m_{11} & m_{12} &m_{13} \\ m_{21}&m_{22} &m_{23} \\ m_{31}&m_{32} & m_{33} \end{bmatrix}=m_{11}m_{22}m_{33}+m_{12}m_{23}m_{31}+m_{13}m_{21}m_{32}-m_{13}m_{22}m_{31}-m_{12}m_{21}m_{33}-m_{11}m_{23}m_{32}\]
13. 矩阵\(M^{\begin{Bmatrix} ij \end{Bmatrix}}\)称作M的余子式,表示从M中去除第i行和j列后剩下的矩阵:\[\begin{bmatrix} -4&-3 &3 \\ 0& 2&-2 \\ 1&4 &-1 \end{bmatrix}\Rightarrow M^{\begin{Bmatrix} ij \end{Bmatrix}}=\begin{bmatrix} 0 &-2 \\ 1 & -1 \end{bmatrix}\]
14. 矩阵的代数余子式。对方阵M,给定行列元素的代数余子式等于相应的余子式的有符号行列式。\(C_{ij}\)表示M的第i行,第j列的代数余子式。注意余子式是一个矩阵,而代数余子式是一个标量:\[C_{ij}=(-1)^{i+j}\left | M^{\begin{Bmatrix} ij \end{Bmatrix}} \right |\]
15. 代数余子式计算n X n阶矩阵的行列式:\[\left | M \right |=\sum_{j=1}^{n}m_{ij}c_{ij} =\sum_{j=1}^{n}m_{ij}(-1)^{i+j}\left | M^{\begin{Bmatrix} ij \end{Bmatrix}} \right |\]
16. 矩阵的逆。方阵M的逆记作\(M^{-1}\),当M与\(M^{-1}\)相乘时,结果是单位矩阵:\[M(M^{-1})=M^{-1}M=I\]
17. 标准伴随矩阵。M的标准伴随矩阵记作“adj M”,定义为M的代数余子式矩阵的转置矩阵,给出矩阵M:\[M=\begin{bmatrix} -4 &-3 &3 \\ 0& 2 &-2 \\ 1& 4 &-1 \end{bmatrix}\]
计算M的代数余子式矩阵:
\(c_{11}=+\begin{vmatrix} 2 &-2 \\ 4 & -1 \end{vmatrix}=6\) ,\(c_{12}=-\begin{vmatrix} 0 &-2 \\ 1 & -1 \end{vmatrix}=-2\) , \(c_{13}=+\begin{vmatrix} 0 &2 \\ 1 & 4 \end{vmatrix}=-2\)
\(c_{21}=-\begin{vmatrix} -3&3 \\ 4 &-1 \end{vmatrix}=9\) ,\(c_{22}=+\begin{vmatrix} -4&3 \\ 1 &-1 \end{vmatrix}=1\) ,\(c_{23}=-\begin{vmatrix} -4&-3 \\ 1 &4 \end{vmatrix}=13\)
\(c_{31}=+\begin{vmatrix} -3&3 \\ 2&-2 \end{vmatrix}=0\) ,\(c_{32}=-\begin{vmatrix} -4&3 \\ 0&-2 \end{vmatrix}=-8\) ,\(c_{33}=+\begin{vmatrix} -4&-3 \\ 0&2 \end{vmatrix}=-8\)
M的标准伴随矩阵是代数余子式的转置:
\[adjM=\begin{bmatrix} c_{11} & c_{12} &c_{13} \\ c_{21} & c_{22} & c_{23}\\ c_{31} & c_{32} & c_{33} \end{bmatrix}^{T}=\begin{bmatrix} 6 &-2 &-2 \\ 9& 1 &13 \\ 0&-8 &-8 \end{bmatrix}^{T}=\begin{bmatrix} 6 &9 &0 \\ -2& 1 &-8 \\ -2&13 &-8 \end{bmatrix}\]
18. 矩阵的逆能够用标准伴随矩阵除以行列式求得:
\[M^{-1}=\frac{adjM}{\left | M \right |}\]
求得公式17矩阵的逆:
\[M^{-1}=\frac{adjM}{\left | M \right |}=\frac{\begin{bmatrix} 6 &9 &0 \\ -2 &1 &-8 \\ -2&13 &-8 \end{bmatrix}}{-24}=\begin{bmatrix} -1/4 &-3/8 &0 \\ 1/12 &-1/24 &1/3 \\ 1/12 &-13/24 &1/3 \end{bmatrix}\]
19. 检测矩阵的正交性。若方阵M是正交的,则当且仅当M与转置\(M^{T}\)的乘积等于单位矩阵。\[MM^{T}=I\]
所以,如果一个矩阵是正交的,那么它的转置就是它的逆(旋转和镜像矩阵是正交的):
\[M^{T}=M^{-1}\]
20. 用4X4矩阵实现3D平移。在4D中,任然可以用矩阵乘法来表达位移,而在3D中是不可能的。即使是在4D中,矩阵乘法仍然是线性变换;
\[\begin{bmatrix} x &y &z &1 \end{bmatrix}\begin{bmatrix} 1 &0 &0 &0 \\ 0& 1& 0&0 \\ 0& 0 &1 &0 \\ \Delta x &\Delta y &\Delta z & 1 \end{bmatrix}=\begin{bmatrix} x+\Delta x & y+\Delta y & z+\Delta z &1 \end{bmatrix}\]
21. 用4X4矩阵向z=d平面投影:
\[\begin{bmatrix} x &y &z &1 \end{bmatrix}\begin{bmatrix} 1 &0 &0 &0 \\ 0& 1& 0&0 \\ 0& 0 &1 &1/d \\ 0&0&0 & 0 \end{bmatrix}=\begin{bmatrix} x & y & z &z/d \end{bmatrix}\]

 

参考书籍:《游戏引擎架构》

《3D Math Primer for graphics and game development》