1. 向量
默认向量是 列向量,即 A ⊤ = ( x , y ) A^\top = \left(x, y\right) A⊤=(x,y)
1.1 点乘和叉乘
有两个向量 a ⃗ \vec{a} a 和 b ⃗ \vec{b} b
1.1.1 点乘
a
⃗
⋅
b
⃗
=
∣
a
⃗
∣
∣
b
⃗
∣
cos
θ
cos
θ
=
a
⃗
⋅
b
⃗
∣
a
⃗
∣
∣
b
⃗
∣
\begin{aligned} \vec{a} \cdot \vec{b} &= \vert\vec{a}\vert \vert\vec{b}\vert \cos\theta \\ \cos\theta &= \frac{\vec{a} \cdot \vec{b}}{\vert\vec{a}\vert \vert\vec{b}\vert} \end{aligned}
a⋅bcosθ=∣a∣∣b∣cosθ=∣a∣∣b∣a⋅b
注:满足 交换律 和 分配律
a
⃗
⋅
b
⃗
=
b
⃗
⋅
a
⃗
a
⃗
⋅
(
b
⃗
+
c
⃗
)
=
a
⃗
⋅
b
⃗
+
a
⃗
⋅
c
⃗
(
k
a
⃗
)
⋅
b
⃗
=
a
⃗
(
k
b
⃗
)
=
k
(
a
⃗
⋅
b
⃗
)
\begin{aligned} \vec{a} \cdot \vec{b} &= \vec{b} \cdot \vec{a} \\ \vec{a} \cdot \left( \vec{b} + \vec{c} \right) &= \vec{a} \cdot \vec{b} + \vec{a} \cdot \vec{c} \\ \left(k\vec{a}\right) \cdot \vec{b}&=\vec{a}\left(k\vec{b}\right)=k\left(\vec{a}\cdot\vec{b}\right) \end{aligned}
a⋅ba⋅(b+c)(ka)⋅b=b⋅a=a⋅b+a⋅c=a(kb)=k(a⋅b)
计算:
- 二维
a ⃗ ⋅ b ⃗ = ( x a y a ) ⋅ ( x b y b ) = x a x b + y a y b \vec{a} \cdot \vec{b}=\left(\begin{array}{l} x_a \\ y_a \end{array}\right) \cdot\left(\begin{array}{l} x_b \\ y_b \end{array}\right)=x_a x_b+y_a y_b a⋅b=(xaya)⋅(xbyb)=xaxb+yayb - 三维
a ⃗ ⋅ b ⃗ = ( x a y a z a ) ⋅ ( x b y b z b ) = x a x b + y a y b + z a z b \vec{a} \cdot \vec{b}=\left(\begin{array}{l} x_a \\ y_a \\ z_a \end{array}\right) \cdot\left(\begin{array}{l} x_b \\ y_b \\ z_b \end{array}\right)=x_a x_b+y_a y_b+z_a z_b a⋅b= xayaza ⋅ xbybzb =xaxb+yayb+zazb
用途: - 寻找两个向量之间的 夹角
- 寻找一个向量在另一个向量上的 投影
- b ⃗ ⊥ = k a ^ \vec{b}_{\perp}=k\hat{a} b⊥=ka^
- k = ∥ b ⃗ ⊥ ∥ = ∥ b ⃗ ∥ cos θ k=\left\|\vec{b}_{\perp}\right\|=\|\vec{b}\| \cos \theta k= b⊥ =∥b∥cosθ
- 投影的好处是可以分解向量
- 计算两个方向有多么接近
- 处理 高光 时会用到
- 判断两个向量的 前后 关系
1.1.2 叉乘
a
⃗
×
b
⃗
=
−
b
⃗
×
a
⃗
∣
a
⃗
×
b
⃗
∣
=
∣
a
⃗
∣
∣
b
⃗
∣
sin
θ
\begin{aligned} \vec{a} \times \vec{b} &= -\vec{b} \times \vec{a} \\ \vert\vec{a} \times \vec{b}\vert &=\vert\vec{a}\vert\vert\vec{b}\vert\sin\theta \end{aligned}
a×b∣a×b∣=−b×a=∣a∣∣b∣sinθ
注:确定方向使用 右手定则,叉积不满足交换律,交换顺序需要加一个负号
用途:
- 建立三维空间的坐标系
- 右手坐标系中 x ⃗ × y ⃗ = z ⃗ \vec{x}\times\vec{y}=\vec{z} x×y=z, y ⃗ × z ⃗ = x ⃗ \vec{y}\times\vec{z}=\vec{x} y×z=x, z ⃗ × x ⃗ = y ⃗ \vec{z}\times\vec{x}=\vec{y} z×x=y,左手坐标系则相反
计算:
- 三维:可以将
a
⃗
\vec{a}
a 先写成矩阵,再与
b
⃗
\vec{b}
b 相乘
a ⃗ × b ⃗ = ( y a z b − y b z a z a x b − x a z b x a y b − y a x b ) a ⃗ × b ⃗ = A ∗ b = ( 0 − z a y a z a 0 − x a − y a x a 0 ) ( x b y b z b ) \begin{aligned} \vec{a} \times \vec{b}&=\left(\begin{array}{c} y_a z_b-y_b z_a \\ z_a x_b-x_a z_b \\ x_a y_b-y_a x_b \end{array}\right) \\ \vec{a} \times \vec{b}&=A^* b=\left(\begin{array}{ccc} 0 & -z_a & y_a \\ z_a & 0 & -x_a \\ -y_a & x_a & 0 \end{array}\right)\left(\begin{array}{l} x_b \\ y_b \\ z_b \end{array}\right) \end{aligned} a×ba×b= yazb−ybzazaxb−xazbxayb−yaxb =A∗b= 0za−ya−za0xaya−xa0 xbybzb
用途:
- 判定向量 左右 关系
- a ⃗ × b ⃗ \vec{a} \times \vec{b} a×b 为 正,则 a ⃗ \vec{a} a 在 b ⃗ \vec{b} b 右 侧,为 负,则在 左 侧
- 判定一个点与三角形的 内外 关系
- 按逆时针排列三角形的三个点,得到 A A A, B B B, C C C,要判断的点是 P P P
- 分别判断 P P P 与三条边的关系,如果 P P P 都在 三条边的左侧或 都在 三条边的右侧,则在 内部,如果出现 不一致,则在 外部
- 具体地,在确定逆时针排列三个点的情况下,分别判断 A B ⃗ × A P ⃗ \vec{AB}\times\vec{AP} AB×AP, B C ⃗ × B P ⃗ \vec{BC}\times\vec{BP} BC×BP, C A ⃗ × C P ⃗ \vec{CA}\times\vec{CP} CA×CP,均为 正,即 P P P 都在三条边的左侧,则在 内部
2. 矩阵
在图形学中的用途就是实现各种 变换
2.1 矩阵乘积
不满足交换律,但满足 结合律 和 分配律