向量
求模
$ \Vert\vec{v}\Vert = \sqrt{\sum_{i=1}^n (\vec{v_{i}})^2} $
对于3D而言: $ \Vert\vec{v}\Vert = \sqrt{\vec{v_{1}}^2 + \vec{v_{2}}^2 + \vec{v_{3}}^2} $标准化
$ \vec{v}_{norm} = \frac{\vec{v}}{\Vert\vec{v}\Vert}, \Vert{\vec{v}}\Vert ≠ 0 $
零向量不能被标准化,数学上这是不允许的,因为0会作为分母。点乘
向量点乘就是对应分量乘积的和,结果是一个标量:
$ \vec{a} · \vec{b} = \sum_{i=1}^n a_{i}b_{i} $几何意义:
点乘等于向量大小和向量夹角的cos值的积:
$ \vec{a} · \vec{b} = \Vert\vec{a}\Vert\vec{b}\Vert cosθ $
点乘结果描述了两个向量的“相似”程度,点乘结果越大,两向量越接近。叉乘
$ \begin{bmatrix} x_{1}\\y_{1}\\z_{1} \end{bmatrix} \times \begin{bmatrix} x_{2}\\y_{2}\\z_{2} \end{bmatrix} =
\begin{bmatrix} y_{1}z_{2} - z_{1}y_{2} \\z_{1}x_{2} - x_{1}z_{2}\\x_{1}y_{2} - y_{1}x_{2} \end{bmatrix}$向量叉乘不满足交换律也不满足结合律。但是满足反交换律:
$ \vec{a} \times \vec{b} = -(\vec{b} \times \vec{a}). $几何解释
叉乘得到的向量是垂直于原来两向量的,指向根据右手定则确定,即两个向量相乘的顺序。
$ \vec{a} \times \vec{b} $的长度等于向量的大小与向量夹角sin值的积:
$ \Vert\vec{a} \times \vec{b}\Vert = \Vert\vec{a}\Vert\Vert\vec{b}\Vert sinθ $ , 等于以a和b为两边的平行四边形的面积。
矩阵
矩阵乘法
$ 记r \times n矩阵A与n \times c矩阵B的积r \times c矩阵AB为C。C的任意元素c_{ij}的结果是A的第i行向量和B的第j列向量点乘的结果:$
$ c_{ij} = \sum_{k=1}^n a_{ik}b_{kj}. $
矩阵运算规律
- 矩阵乘法不满足交换律: $ AB ≠ BA $
- 矩阵乘法满足结合律: $ ABC = (AB)C = A(BC) $
- 矩阵乘法满足与标量的结合律: $ k(AB) = A(kB) = (kA)B $
- 矩阵积的转置相当于每个矩阵逆的反向相乘: $ (AB)^T = B^TA^T, (AB…N)^T = N^T…B^TA^T $
- 矩阵在操作向量时,采用列向量和行向量的表达方式不同,如:
用A,B,C三个矩阵分别按顺序转换向量$ \vec{v} $,采用列向量表示为$ CBA\vec{v} $(从右往左相乘),采用行向量则是$ \vec{v}ABC $(从左往右相乘)
矩阵变换
旋转
绕x轴渲染θ弧度:
$ R_{x}(θ) = \begin{bmatrix} p’\\q’\\r’ \end{bmatrix} = \begin{bmatrix}1&0&0\\0&cosθ&sinθ\\0&-sinθ&cosθ\end{bmatrix}
$绕y轴渲染θ弧度:
$ R_{y}(θ) = \begin{bmatrix} p’\\q’\\r’ \end{bmatrix} = \begin{bmatrix}cosθ&0&-sinθ\\0&1&0\\sinθ&0&cosθ\end{bmatrix}
$绕z轴渲染θ弧度:
$ R_{z}(θ) = \begin{bmatrix} p’\\q’\\r’ \end{bmatrix} = \begin{bmatrix}cosθ&sinθ&0\\ -sinθ&cosθ&0\\0&0&1\end{bmatrix}
$绕任意轴$ \vec{n} $旋转θ:
$ R_{n}(θ) = \begin{bmatrix} p’\\q’\\r’ \end{bmatrix} = \begin{bmatrix}n_{x}^2(1-cosθ) + cosθ&n_{x}n_{y}(1-cosθ) + n_{z}sinθ&n_{x}n_{z}(1-cosθ) - n_{y}sinθ
\\n_{x}n_{y}(1-cosθ) - n_{z}sinθ&n_{y}^2(1-cosθ) + cosθ&n_{y}n_{z}(1-cosθ) + n_{x}sinθ
\\n_{x}n_{z}(1-cosθ) + n_{y}sinθ&n_{y}n_{z}(1-cosθ) - n_{x}sinθ&n_{z}^2(1-cosθ) + cosθ
\end{bmatrix} $缩放
沿坐标轴的缩放:
$ S(k_x, k_y, k_z) = \begin{bmatrix} k_x&0&0\\0&k_y&0\\0&0&k_z \end{bmatrix} $沿任意轴$ \vec{n} $的缩放(以单位向量n为方向,以k为缩放因子):
$ S(\vec{n}, k) = \begin{bmatrix} p’\\q’\\r’ \end{bmatrix} =
\begin{bmatrix}
1+(k-1)n_x^2&(k-1)n_xn_y&(k-1)n_xn_z \\
(k-1)n_xn_y&1+(k-1)n_y^2&(k-1)n_yn_z \\
(k-1)n_xn_z&(k-1)n_zn_y&1+(k-1)n_z^2
\end{bmatrix} $正交投影
- 通过设置沿任意方向缩放公式的系数k=0,可以导出垂直于$ \vec{n} $的平面的投影公式
$ P(\vec{n}) = S(\vec{n},0) =
\begin{bmatrix}
1-n_x^2&-n_xn_y&-n_xn_z \\
-n_xn_y&1-n_y^2&-n_yn_z \\
-n_xn_z&-n_zn_y&1-n_z^2
\end{bmatrix} $
- 通过设置沿任意方向缩放公式的系数k=0,可以导出垂直于$ \vec{n} $的平面的投影公式
镜像
- 通过设置沿任意方向缩放公式的系数k=-1,可以导出垂直于$ \vec{n} $且通过原点的平面的镜像公式
$ P(\vec{n}) = S(\vec{n}, -1) =
\begin{bmatrix}
1-2n_x^2&-2n_xn_y&-2n_xn_z \\
-2n_xn_y&1-2n_y^2&-2n_yn_z \\
-2n_xn_z&-2n_zn_y&1-2n_z^2
\end{bmatrix} $
- 通过设置沿任意方向缩放公式的系数k=-1,可以导出垂直于$ \vec{n} $且通过原点的平面的镜像公式
错切
矩阵变换的分类
线性变换
定义:如果映射F保持了基本运算:加法和数量乘,那么就可以称该映射是线性的。在这种情况下,将两个向量相加然后再进行变换得到的结果和先分别进行变换再将变换后的向量相加得到的结果相同。同样,将一个向量数量乘再进行变换和先进行变换再数量乘的结果是一样的。
$ F(a+b) = F(a) + F(b) $
$ F(ka) = kF(a) $对于上面的旋转、缩放、投影、镜像、错切变换,都是线性变换。
仿射变换
定义:线性变换后接着平移的变换。任何线性变换都是仿射变换,但仿射变换未必是线性变换。
$ v’ = vM + b $, 当b = 0时,就是线性变换,b ≠ 0时,是非线性变化。
可逆变换
定义:如果存在一个逆变换,可以”撤销”原变换,则该变换可逆。
$ F^{-1}(F(a)) = a $, 如果存在$ F^{-1} $, 使得等式成立,则对于任意a,映射F(a)可逆。
除了投影变换外,包括平移,都是可逆变换。
可逆矩阵的行列式不为0。等角变换
定义:如果变换前后两个向量夹角的大小和方向都不改变,改变换是等角的。
只有平移,旋转和等比缩放是等角变换。
正交变换
平移,旋转和镜像是仅有的正交变换。
正交矩阵的行列式为1或-1。刚体变换
…
矩阵的行列式
方阵M的行列式记作$ \vert M \vert $或$ det M $.
一个3*3阶矩阵的行列式定义如下:
$ \begin{vmatrix} m_{11}&m_{12}&m_{13} \\m_{21}&m_{22}&m_{23} \\m_{31}&m_{32}&m_{33} \end{vmatrix} = 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} $
余子式和代数余子式
对于一个$ r\times c $的矩阵,记$ M^{ij} $表示从M中除去第i行和第j列后剩下的矩阵,矩阵 $ M^{ij}$ 称作M的余子式。$ M^{ij} $有r-1行,c-1列。
对于方阵M,给定行、列元素的代数余子式等于相应余子式的有符号行列式:
$ c_{ij} = (-1)^{i+j}\vert M^{ij} \vert $计算n维方阵的行列式
利用方阵的余子式和代数余子式计算其行列式: 首先,从矩阵中任意选择一行或一列,对该行或列中的每个元素,都乘以对应的代数余子式。这些积的和就是矩阵的行列式。如,选择了一行i,则:
$ \vert M \vert = \sum_{j=1}^{n}m_{ij}c_{ij} = \sum_{j=1}^{n}m_{ij}(-1)^{i+j}\vert M^{ij} \vert $, 如:$ \begin{vmatrix} m_{11}&m_{12}&m_{13}&m_{14}\\m_{21}&m_{22}&m_{23}&m_{24}\\m_{31}&m_{32}&m_{33}&m_{34}\\m_{41}&m_{42}&m_{43}&m_{44}\end{vmatrix} =
m_{11}\begin{vmatrix} m_{22}&m_{23}&m_{24}\\m_{32}&m_{33}&m_{34}\\m_{42}&m_{43}&m_{44} \end{vmatrix}
-m_{12}\begin{vmatrix} m_{21}&m_{23}&m_{24}\\m_{31}&m_{33}&m_{34}\\m_{41}&m_{43}&m_{44} \end{vmatrix}
+m_{13}\begin{vmatrix} m_{21}&m_{22}&m_{24}\\m_{31}&m_{32}&m_{34}\\m_{41}&m_{42}&m_{44} \end{vmatrix}
-m_{14}\begin{vmatrix} m_{21}&m_{22}&m_{23}\\m_{31}&m_{32}&m_{33}\\m_{41}&m_{42}&m_{43} \end{vmatrix}
$行列式的性质
- 矩阵积的行列式等于矩阵行列式的积:$ \vert{AB}\vert = \vert{A}\vert\vert{B}\vert $
- 矩阵转置的行列式等于原矩阵的行列式:$ \vert{M^T}\vert = \vert{M}\vert $.
- 如果矩阵的任意行或者列全为零,则它的行列式等于零。
- 交换矩阵的任意两行或者两列,行列式变负。
- 任意行或者列的非零积加到另一行或列上不会改变行列式的值。
- 矩阵的行列式为零,则该矩阵包含投影;如果矩阵的行列式为负,则该矩阵包含镜像。
矩阵的逆
$ M(M^{-1}) = M^{-1}M = I $,$ M^{-1} $是方阵$ M $的逆矩阵,二者相乘结果是单位矩阵。
并非所有矩阵都有逆,如矩阵的某行或某列都是0元素,则任何矩阵乘以该矩阵结果都是零矩阵。
一个矩阵有逆矩阵,则称它为可逆或者非奇异矩阵;如果某矩阵没有逆矩阵,则称它为不可逆或者奇异矩阵。
奇异矩阵行列式为零,非奇异矩阵的行列式不为零。标准伴随矩阵
矩阵$ M $中每个元素对应的代数余子式构成的矩阵$ M’ $称作代数余子式矩阵.
$ M $的标准伴随矩阵定义为M的代数余子式矩阵的转置矩阵,记作$ adjM $.$ adjM = M’^T $
矩阵求逆
$ M^{-1} = {adjM \over \vert{M}\vert} $, 即矩阵M的逆等于其标准伴随矩阵除以其行列式。
矩阵的逆的相关性质
- 若M是非奇异矩阵,则该矩阵的逆的逆等于原矩阵:$ (M^{-1})^{-1} = M $.
- $ I^{-1} = I $.
- $ (M^T)^{-1} = (M^{-1})^T $.
- $ (AB)^{-1} = B^{-1}A^{-1} $.
正交矩阵
若方阵M是正交的,则当且仅当M与它的转置矩阵$ M^T $的乘积等于单位矩阵:
$ M正交 \Leftarrow\Rightarrow MM^T = I $.先前,我们知道$ MM^{-1} = I $, 所以可知当矩阵正交时有: $ M^{-1} = M^T $.
这是一条极其重要的性质,可以用来计算矩阵的逆。
计算矩阵时,仅在预先知道矩阵是正交时才能利用正交性的优点。如果预先不知道,那么检查正交性就是在浪费时间。即使在最好的情况下,先检查正交性以确定矩阵是否正交再进行转置,和一开始就进行求逆运算也将耗费同样多的时间。而如果矩阵不正交,那么这种检查完全是浪费时间。4*4齐次矩阵
平移
$ 3\times 3 $矩阵表达的都是线性变化,不包含平移。可以通过齐次坐标来表达平移:
$ T = \begin{bmatrix} 1&0&0&0\\0&1&0&0\\0&0&1&0\\\Delta{x}&\Delta{y}&\Delta{y}&1 \end{bmatrix} $
对于一个3D的点(如位置),在齐次坐标系中表示为(w = 1)
$ P = \begin{bmatrix} x&y&z&1 \end{bmatrix} $
对于一个3D的方向(如法线),在齐次坐标系中表示为(w = 0)
$ D = \begin{bmatrix} x&y&z&0 \end{bmatrix} $
齐次坐标系中,对一个点通过矩阵来执行平移转换可以通过相乘来操作:
$ PT = \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{y}&1 \end{bmatrix} = \begin{bmatrix} x + \Delta{x}&y + \Delta{y}&z+\Delta{z}&1 \end{bmatrix} $
如果对一个方向执行同样的平移操作,则:
$ DT = \begin{bmatrix} x&y&z&0 \end{bmatrix}\begin{bmatrix} 1&0&0&0\\0&1&0&0\\0&0&1&0\\\Delta{x}&\Delta{y}&\Delta{y}&1 \end{bmatrix} = \begin{bmatrix} x&y&z&0 \end{bmatrix} $
可见,平移转换对一个只有方向特性的向量而言是无效的。但是旋转,缩放等操作,虽然不改变向量的无穷远点的特性,但是会改变向量本身的方向和大小的特性。
方位的表达
矩阵形式
欧拉角
四元数
不同形式之间的转换
不同形式的优缺点