本文描述了在任意维度空间中寻找两线段之间最小距离的数学框架。它定义了平方距离函数,处理了退化情况,区分了平行和非平行线段,并确定了潜在的临界点。
1. 线段的参数化表示:
两条线段用参数化形式定义:
P(s) = (1-s)P0 + sP1,其中 s 的取值范围为 [0, 1]。Q(t) = (1-t)Q0 + tQ1,其中 t 的取值范围为 [0, 1]。$P_0$ 和 $P_1$ 是第一条线段的端点,$Q_0$ 和 $Q_1$ 是第二条线段的端点。2. 平方距离函数:
线段上任意两点 P(s) 和 Q(t) 之间的平方距离由以下二次函数给出:
$R(s, t) = |P(s) - Q(t)|^2 = as^2 - 2bst + ct^2 + 2ds - 2et + f$
其中系数 a、b、c、d、e 和 f 使用线段端点差的向量点积定义。
3. 退化情况:
该算法处理了一条或两条线段长度为零(变成点)的退化情况。这简化为点到线段或点到点的距离计算。
4. 平行和非平行线段:
$Δ = ac - b^2$ 决定了线段是否平行。Δ > 0,则线段不平行。R(s, t) 表示一个抛物面。Δ = 0,则线段平行。R(s, t) 表示一个抛物柱面。5. 最小化策略:
目标是找到 R(s, t) 在单位正方形 [0, 1] x [0, 1](表示 s 和 t 的有效范围)内的最小值。最小值可能出现在:
R 的梯度为零的位置。