向量与线性代数
# 1 图形学依赖
- 基础数学:线性代数、微积分、统计学
- 基础物理:光学、力学
- 其他:信号处理、数值分析、美学
# 2 向量Vectors
- 用结束点坐标-起始点坐标 $\overrightarrow{AB}=A-B$
- 方向和长度
- 没有确定的开始位置
# 2.1 向量标准化Vector Normalization
- $|\vec{a}|$表示向量的长度
- 单位向量$\hat{a}=\frac{\vec{a}}{|\vec{a}|}$,表达方向
# 2.2 向量标准化Vector Addition
- 几何学:平行四边形法则&三角形法则
- 代数:直接将向量坐标相加
# 2.3 向量相乘Vector Multiplication
# 2.3.1 向量点乘Dot product
$$ \vec{a}\cdot \vec{b} = |\vec{a}| |\vec{b}| \cos\theta $$ 对于单位向量$\cos\theta = \hat{a} \cdot \hat{b}$ 在二维里 $$ \vec{a} \cdot \vec{b} = \begin{pmatrix}x_a \y_a \end{pmatrix} \cdot \begin{pmatrix}x_b \y_b \end{pmatrix} = x_ax_b + y_ay_b $$ 在三维里 $$ \vec{a} \cdot \vec{b} = \begin{pmatrix}x_a \y_a \z_a \end{pmatrix} \cdot \begin{pmatrix}x_b \y_b \z_b \end{pmatrix} = x_ax_b + y_ay_b +z_az_b $$
点乘在图形学里
- 找到两个方向之间的夹角
- 找到一个向量到另一个向量的投影,$\vec{b_\bot}=k\hat{a}$,$k=|\vec{b_\bot}| = |\vec{b}|\cos\theta$
- 将一个向量按照某个方向垂直平行分解,平行的是$\vec{b_\bot}$,垂直的是$\vec{b}-\vec{b_\bot}$
- 可以计算两个方向向量在方向上是否接近,点乘接近1就两个方向向量接近,远离就会逐渐变为1
- 计算向量的前后(光照模型基础),点乘
>0
向前,<0
向后
# 2.3.2 向量叉乘Cross product
$|\vec{a}\times\vec{b}| = |\vec{a}| |\vec{b}| \sin\theta$
- 叉乘后得到的向量要同时与a、b垂直
- 叉乘后向量的方向遵循右手螺旋定则
- 叉乘不符合交换律
- 可以建立三维坐标中的直角坐标系$\vec{x}\times\vec{y}=+\vec{z}$(右手坐标系)
$$ \vec{a}\times\vec{b}= \begin{pmatrix}y_az_b-y_bz_a \z_ax_b-x_az_b\x_ay_b-y_ax_b \end{pmatrix} $$ $$ \vec{a}\times\vec{b}= A*b= \begin{pmatrix}0 & -z_a & y_a\z_a & 0 & -x_a\-y_a & x_a & 0 \end{pmatrix} \begin{pmatrix}x_b\y_b\z_b \end{pmatrix} $$
叉乘在图形学里
- 判定向量的左右侧关系,$\vec{a}\times\vec{b}>0$则b在a的左侧,a逆时针旋转可以转到b的方向
- 判定向量的内外
# 3 矩阵
- 一个二维的Array(
m*n
,m是行数,n是列数) - 矩阵和数字的加减乘除都是直接运算到矩阵里的每一个数字
# 3.1 矩阵乘积 Matrix-Matrix Multiplication
- 乘积对矩阵大小有要求
(M*N)(N*P)=(M*P)
,第一个矩阵的列数必须等于第二个举证的行数 - 矩阵乘积得到的元素
(i,j)
就是第一个矩阵i行依次与第二个矩阵j列乘积求和 - 矩阵乘积没有任何交换律,有结合律和分配率
# 3.2 矩阵转置 Transpose of a Matrix
- 行列互换
- $(AB)^T = B^TA^T$
# 3.3 单位矩阵
- $I_{3\times3} = \begin{pmatrix}1 & 0 & 0\0 & 1 & 0\0 & 0 & 1 \end{pmatrix}$
- $AA^{-1} = A^{-1}A = I$
- $(AB)^{-1} = B^{-1}A^{-1} = I$
# 3.4 向量乘法以矩阵形式展示
- 点乘$\vec{a}\cdot \vec{b} = \vec{a}^T\vec{b} = \begin{pmatrix}x_a\y_a\z_a\end{pmatrix}\begin{pmatrix}x_b&y_b&z_b\end{pmatrix} =(x_ax_b+y_ay_b+z_az_b)$
- 叉乘$\vec{a}\times \vec{b} = A^*b=\begin{pmatrix}0&-z_a&y_a\z_a&0&-x_a\-y_a&x_a&0\end{pmatrix}\begin{pmatrix}x_b\y_b\x_b\end{pmatrix}$