Files
2025-02-23 20:51:53 +08:00

251 lines
7.8 KiB
Markdown

# 数学基础(一)
----
## 1. 基础约定
### 1.1 坐标系
#### 1.1.1 左手坐标系
![](./axis_left.svg )
DirectX一般缺省使用左手坐标系
#### 1.1.2 右手坐标系
![](./axis_right.svg)
OpenGL缺省使用右手坐标系,图形学中缺省使用这种坐标系
### 1.2 左乘和右乘
#### 1.2.1 左乘,前乘(pre-multiply)
矢量为行向量,和矩阵的乘法为
$$
[x,y,z]\begin{bmatrix}
M_{11}&M_{12}&M_{13} \\
M_{21}&M_{22}&M_{23} \\
M_{31}&M_{32}&M_{33}
\end{bmatrix}
$$
DirectX缺省使用左乘
#### 1.2.2 右乘,后乘(post-multiply)
矢量为列向量,和矩阵的乘法为
$$
\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}
$$
OpenGL缺省使用右乘,图形学中缺省使用这种方式。
### 1.3 行存储和列存储
#### 1.3.1 行存储
在计算机内存中,按照行优先存储一个矩阵,DirectX使用这种方式
比如对于矩阵
$$
\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_{12},M_{13},M_{21},M_{22}\ldots$
#### 1.3.2 列存储
按照列优先存储一个矩阵,OpenGL使用这种方式
比如对于矩阵
$$
\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_{21},M_{31},M_{12},M_{22}\ldots$
## 2. 矢量
### 2.1 基本操作
#### 2.1.1 定义
$$
\begin{split}
\vec{u}&=[u_x,u_y,u_z]^T, \vec{v}=[v_x,v_y,v_z]^T \\
\vec{u}\pm\vec{v}&=[u_x\pm v_x, u_y\pm v_y, u_z\pm v_z]^T \\
k\vec{u}&=[ku_x, ku_y, ku_z]^T \\
\end{split}
$$
#### 2.1.2 几何意义
![](./vector_op.svg)
### 2.2 标准矢量
![](./standard_basis.svg)
标准矢量(Standard Basis),定义$\vec{\boldsymbol i}=[1,0,0]^T, \vec{\boldsymbol j}=[0,1,0]^T, \vec{\boldsymbol k}=[0,0,1]^T$
### 2.3 长度
#### 2.3.1 定义
对于三维矢量$\vec{u}$,定义矢量的长度
$$
\|\vec{u}\|=\sqrt{u_x^2+u_y^2+u_z^2}
$$
有时候矢量的长度也可以用$|\vec{u}|$表示,但容易和绝对值混淆
#### 2.3.2 定义
对于三维矢量$\vec{u}$,定义矢量的单位矢量
$$
\hat{\vec{u}}=\frac{\vec{u}}{\|\vec{u}\|}=(\frac{u_x}{\|\vec{u}\|}, \frac{u_y}{\|\vec{u}\|},
\frac{u_z}{\|\vec{u}\|})
$$
### 2.4 点积
#### 2.4.1 定义
对于两个三维矢量$\vec{u}, \vec{v}$,定义它们的点积([Dot Product](https://en.wikipedia.org/wiki/Dot_product))为
$$
\vec{u}\cdot\vec{v}=u_xv_x+u_yv_y+u_zv_z
$$
#### 2.4.2 点积的几何意义
![](./dot_product.svg)
$$
\vec{a}\cdot\vec{b}=\|\vec{a}\|\|\vec{b}\|\cos{\theta}
$$
两个向量的点积可以看成两个向量相近的程度,向量和自身的点积是向量长度的平方
$$
\vec{u}\cdot\vec{u}=\|\vec{u}\|\|\vec{u}\|=u_x^2+u_y^2
$$
向量$\vec{a}$在向量$\vec{b}$上的投影的长度为
$$
a_b=\frac{\vec{a}\cdot\vec{b}}{\|b\|}
$$
#### 2.4.3 推论
判断两个矢量$\vec{\boldsymbol u},\vec{\boldsymbol v}$之间的夹角和它们之间点积的关系
$$
\cos(\theta)=\frac{\vec{\boldsymbol u}\cdot \vec{\boldsymbol v}}{\|\vec{\boldsymbol u}\|\|\vec{\boldsymbol v}\|}
$$
- 当$\vec{u}\cdot\vec{v}\gt 0$,夹角在[0,90)之间
- 当$\vec{u}\cdot\vec{v}=0$,两个矢量垂直
- 当$\vec{u}\cdot\vec{v}\lt 0$,两个矢量夹角在(90,180]之间
#### 2.4.3 基本运算规则
矢量的点积满足一般的交换律、分配律
- $\vec{a}\cdot\vec{b}=\vec{b}\cdot\vec{a}$
- $\vec{a}\cdot(\vec{b}+\vec{c}) = \vec{a}\cdot\vec{b}+\vec{a}\cdot\vec{c}$
- $(k\vec{a})\cdot\vec{b}=\vec{a}\cdot(k\vec{b})=k(\vec{a}\cdot\vec{b})$
### 2.5叉积
#### 2.5.1 定义
对于两个三维矢量$\vec{a}, \vec{b}$,定义它们的叉积
$$\begin{aligned}
\vec{\boldsymbol a}\times\vec{\boldsymbol b}&=\begin{vmatrix}
\vec{\boldsymbol i}& \vec{\boldsymbol j} & \vec{\boldsymbol k}\cr
a_x & a_y & a_z \cr
b_x & b_y & b_z
\end{vmatrix}\\
&=(a_yb_z-a_zb_y)\vec{\boldsymbol{i}}+(a_zb_x-a_xb_z)\vec{\boldsymbol{j}}+(a_xb_y-a_yb_x)\vec{\boldsymbol{k}}
\end{aligned}
$$
#### 2.5.2 叉积的几何意义
在三维几何中,向量a和向量b的叉乘结果是一个向量,更为熟知的叫法是法向量,该向量垂直于a和b向量构成的平面。
![](./cross_product.svg)
定义向量$\vec{\boldsymbol n}$是一个单位向量,方向同时垂直于向量$\vec{\boldsymbol u}$和$\vec{\boldsymbol v}$,且符合右手定则(右手坐标系),那么
$$
\vec{\boldsymbol u}\times\vec{\boldsymbol v}=\|\vec{\boldsymbol u}\|\|\vec{\boldsymbol v}\|\sin(\theta)\vec{\boldsymbol n}
$$
向量a和向量b的叉积还可以视作以$\vec{a}$和$\vec{b}$为边的平行四边形的面积
#### 2.5.3 基本运算规则
- $\vec{a}\times\vec{b}=-\vec{b}\times\vec{a}$
- $\vec{a}\times\vec{a}=\vec{0}$
- $\vec{a}\times(\vec{b}+\vec{c})=\vec{a}\times\vec{b}+\vec{a}\times\vec{c}$
- $\vec{a}\times(k\vec{b})=k(\vec{a}\times\vec{b})$
#### 2.5.4 叉积的矩阵形式
两个向量的叉积,可以表达成一个矩阵和向量的乘积的形式,例如向量$\vec{a}$和$\vec{b}$的叉积
$$
\vec{a}\times\vec{b}=\begin{bmatrix}
{(\vec{a}\times\vec{b}})_{x}\\
{(\vec{a}\times\vec{b}})_{y}\\
{(\vec{a}\times\vec{b}})_{z}
\end{bmatrix}=\begin{bmatrix}
a_yb_z-a_zb_y\\
a_zb_x-a_xb_z\\
a_xb_y-a_yb_x
\end{bmatrix}=\begin{bmatrix}
0&-a_z&a_y\\
a_z&0&-a_x\\
-a_y&a_x&0
\end{bmatrix}\begin{bmatrix}
b_x\\b_y\\b_z
\end{bmatrix}
$$
这里称这个矩阵为矢量$\vec{a}$的叉乘矩阵[cross-product matrix](https://en.wikipedia.org/wiki/Cross_product#Conversion_to_matrix_multiplication),写作$[\boldsymbol{a}]_{\times}$
$$
[\boldsymbol{a}]_{\times}\overset{def}{=}\begin{bmatrix}
0&-a_z&a_y\\
a_z&0&-a_x\\
-a_y&a_x&0
\end{bmatrix}
$$
### 2.6 混合积
对于三个矢量$\vec{a},\vec{b},\vec{c}$,定义混合积为
$$
(\vec{a}\times\vec{b})\cdot\vec{c}
$$
混合积满足
$$
(\vec{a}\times\vec{b})\cdot\vec{c}=(\vec{b}\times\vec{c})\cdot\vec{a}=(\vec{c}\times\vec{a})\cdot\vec{b}
$$
#### 2.6.1 混合积的几何意义
如图,以三个矢量为边的棱作平行六面体,$\|\vec{a}\times\vec{b}\|$可以视作以$\vec{a}$和$\vec{b}$为边的平行四边形的面积,$(\vec{a}\times\vec{b})\cdot\vec{c}$可以视作这个平行六面体的体积
![](./vector_trip.svg)
### 2.7 三重积
对于三个矢量$\vec{a},\vec{b},\vec{c}$,有如下公式
$$
\vec{a}\times(\vec{b}\times\vec{c})=(\vec{a}\cdot\vec{c})\vec{b}-(\vec{a}\cdot\vec{b})\vec{c}\tag{2.6.1}
$$
证明:
设$\vec{d}=\vec{a}\times(\vec{b}\times\vec{c})$,可知$\vec{d}$垂直于$\vec{b}$和$\vec{c}$所组成的平面的法线,也就是$\vec{d}$平行于$\vec{b}$和$\vec{c}$所组成的平面。所以$\vec{d}$可以表达成$\vec{b}$和$\vec{c}$的线性组合
$$
\vec{d}=m\vec{b}+n\vec{c}
$$
由于$\vec{d}$垂直于$\vec{a}$,所以
$$\begin{split}
\vec{a}\cdot(m\vec{b}+n\vec{c})&=0\\
m(\vec{a}\cdot\vec{b})+n(\vec{a}\cdot\vec{c})&=0
\end{split}$$
所以一定存在一个非零的实数$p$,使得$m=p(\vec{a}\cdot\vec{c}), n=-p(\vec{a}\cdot\vec{b})$,所以
$$
\vec{d}=\vec{a}\times(\vec{b}\times\vec{c})=p(\vec{a}\cdot\vec{c})\vec{b}-p(\vec{a}\cdot\vec{b})\vec{c}
$$
由于这是一个恒等式,$p$的值和$\vec{a},\vec{b},\vec{c}$无关,当特殊情况$\vec{a}=\vec{c}$时,有
$$
\vec{a}\times(\vec{b}\times\vec{a})=p(\vec{a}\cdot\vec{a})\vec{b}-p(\vec{a}\cdot\vec{b})\vec{a}
$$
两边同时点积$\vec{b}$,可以得到
$$
\vec{a}\times(\vec{b}\times\vec{a})\cdot\vec{b}=p(\vec{a}\cdot\vec{a})(\vec{b}\cdot\vec{b})-p(\vec{a}\cdot\vec{b})(\vec{a}\cdot\vec{b})
$$
等号左侧应用混合积公式,可以得到
$$\begin{split}
\vec{a}\times(\vec{b}\times\vec{a})\cdot\vec{b}&=(\vec{b}\times\vec{a})\cdot(\vec{b}\times\vec{a})\\
&=\|a\|^2\|b\|^2sin^2(\theta)
\end{split}$$
等号右侧
$$\begin{split}
p(\vec{a}\cdot\vec{a})(\vec{b}\cdot\vec{b})-p(\vec{a}\cdot\vec{b})(\vec{a}\cdot\vec{b})&=p\|a\|^2\|b\|^2-p\|a\|^2\|b\|^2cos^2(\theta)\\
&=p\|a\|^2\|b\|^2(1-cos^2(\theta))\\
&=p\|a\|^2\|b\|^2sin^2(\theta)
\end{split}$$
由此可得$p=1$