**点积(Dot Product)和叉积(Cross Product)**是向量代数中最基础且最重要的两种运算,它们的结果、几何意义和物理应用截然不同。
以下是核心区别对比:
1. 核心区别一览表
| 特性 | 点积 (Dot Product) a⋅b\mathbf{a} \cdot \mathbf{b}a⋅b | 叉积 (Cross Product) a×b\mathbf{a} \times \mathbf{b}a×b |
|---|---|---|
| 结果类型 | 标量 (Scalar) (一个数值,如 5,−2.55, -2.55,−2.5) | 向量 (Vector) (一个有方向和大小的量) |
| 几何意义 | 投影 / 相似度 衡量两个向量方向有多"接近"。 | 垂直 / 面积 生成一个垂直于原两个向量的新向量。 |
| 公式 | $ | \mathbf{a} |
| 维度要求 | 适用于任意维度 (2D, 3D, N维) | 仅适用于 3D (或 7D) |
| 交换律 | 满足 (a⋅b=b⋅a\mathbf{a} \cdot \mathbf{b} = \mathbf{b} \cdot \mathbf{a}a⋅b=b⋅a) | 不满足 (a×b=−b×a\mathbf{a} \times \mathbf{b} = - \mathbf{b} \times \mathbf{a}a×b=−b×a) |
| 零结果含义 | 结果为0 →\rightarrow→ 向量垂直 (θ=90∘\theta=90^\circθ=90∘) | 结果为0 →\rightarrow→ 向量平行 (θ=0∘\theta=0^\circθ=0∘ 或 180∘180^\circ180∘) |
2. 详细解析
A. 点积 (Dot Product)
别名:数量积、内积
-
直观理解 :
想象你推着一个箱子走。点积计算的是"你的推力方向 "与"箱子移动方向"的一致性。
- 如果你推着箱子往前走(同向),做正功(正值)。
- 如果你推着箱子往后拉(反向),做负功(负值)。
- 如果你侧着推(垂直),箱子不前后移动,不做功(零值)。
-
数学计算 (三维向量 a=a1,a2,a3,b=b1,b2,b3\mathbf{a}=a_1, a_2, a_3, \mathbf{b}=b_1, b_2, b_3a=a1,a2,a3,b=b1,b2,b3):
a⋅b=a1b1+a2b2+a3b3 \mathbf{a} \cdot \mathbf{b} = a_1b_1 + a_2b_2 + a_3b_3 a⋅b=a1b1+a2b2+a3b3
-
在 3D 重建/GSplat 中的应用:
- 计算相机视线方向与高斯表面法线的夹角,用于确定可见性。
- 计算两个向量的夹角余弦值。
B. 叉积 (Cross Product)
别名:向量积、外积
-
直观理解 :
想象你用右手定则。食指指向 a\mathbf{a}a,中指指向 b\mathbf{b}b,大拇指指向的方向就是 a×b\mathbf{a} \times \mathbf{b}a×b 的方向。
- 它生成了一个垂直 于 a\mathbf{a}a 和 b\mathbf{b}b 所构成平面的法向量。
- 它的大小等于以 a\mathbf{a}a 和 b\mathbf{b}b 为邻边的平行四边形的面积。
-
数学计算 (使用行列式形式):
a×b=∣ijka1a2a3b1b2b3∣=(a2b3−a3b2)i−(a1b3−a3b1)j+(a1b2−a2b1)k \mathbf{a} \times \mathbf{b} = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\ a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \end{vmatrix} = (a_2b_3 - a_3b_2)\mathbf{i} - (a_1b_3 - a_3b_1)\mathbf{j} + (a_1b_2 - a_2b_1)\mathbf{k} a×b= ia1b1ja2b2ka3b3 =(a2b3−a3b2)i−(a1b3−a3b1)j+(a1b2−a2b1)k
即:
{x=a2b3−a3b2y=a3b1−a1b3z=a1b2−a2b1 \begin{cases} x = a_2b_3 - a_3b_2 \\ y = a_3b_1 - a_1b_3 \\ z = a_1b_2 - a_2b_1 \end{cases} ⎩ ⎨ ⎧x=a2b3−a3b2y=a3b1−a1b3z=a1b2−a2b1
-
在 3D 重建/GSplat 中的应用:
- 计算法线:给定三角形三个顶点,用两条边的叉积求出三角形表面的法线。
- 构建局部坐标系:在渲染高斯泼溅时,需要构建相机空间的局部坐标系,常用叉积来确定正交基(U, V, N)。
- 判断方向:判断一个点是位于平面的左侧还是右侧。
3. 记忆小技巧
- 点积 (Dot) :结果是一个点 (标量)。
- 口诀:"点积得数, cosine 角度。"
- 叉积 (Cross) :结果是一个交叉 的箭头(向量),垂直于原平面。
- 口诀:"叉积得向, sine 面积,右手螺旋。"
4. 代码对比 (Python/NumPy)
python
import numpy as np
a = np.array([1, 0, 0])
b = np.array([0, 1, 0])
# 点积
dot_res = np.dot(a, b)
print(f"点积结果: {dot_res}")
# 输出: 0 (因为互相垂直)
# 叉积
cross_res = np.cross(a, b)
print(f"叉积结果: {cross_res}")
# 输出: [0 0 1] (因为垂直于XY平面,指向Z轴)
总结
- 如果你想问**"这两个向量方向有多像?"** 或 "投影长度是多少?" →\rightarrow→ 用 点积。
- 如果你想问**"这两个向量张成的平面法线指向哪?"** 或 "它们构成的面积多大?" →\rightarrow→ 用 叉积。