$$ \vec{a} \cdot \vec{b} = \lVert \vec{a} \rVert \lVert \vec{b} \rVert \cos \theta
\\
\cos \theta = \frac{\vec{a} \cdot \vec{b}} {\lVert \vec{a} \rVert \lVert \vec{b} \rVert},
\quad
\cos \theta = \hat{a} \cdot \hat{b} $$
Application in Graphics
\begin{pmatrix} 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{pmatrix} $$
\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}$ 的方向是右手螺旋法,即右手四指从 $\vec{a}$ 的方向握向 $\vec{b}$ 的方向时,大拇指的朝向。
$\vec{a} \times \vec{b}$ 的模长就是 $\lVert \vec{a} \rVert \lVert \vec{b} \rVert \sin \theta$ 。
叉乘的应用:判断左和右,判断内和外 (视频 37:02)

判断左和右:$\vec{a} \times \vec{b}$ 的结果为正,说明 $\vec{a}$ 在 $\vec{b}$ 的左侧,反之同理。)
判断内和外
P 在三角形内部等价于在三条边的同一侧, $\vec{PA}$ 分别和 $\vec{a}, \vec{b}, \vec{c}$ 做三次叉乘即可
procedure cross(a, b):
return a.x * b.y - b.x * a.y
procedure is_point_in_triangle(P, A, B, C):
AB = B - A
BC = C - B
CA = A - C
AP = P - A
BP = P - B
CP = P - C
c1 = cross(AB, AP)
c2 = cross(BC, BP)
c3 = cross(CA, CP)
// We must check each sign, think about "- - +"
all_positive = c1 > 0 or c2 > 0 or c3 > 0
all_negative = c1 < 0 or c2 < 0 or c3 < 0
if all_positive or all_negative:
return true
else:
return false
m x n → m rows, n colsy