本文描述了在任意维度空间中寻找两线段之间最小距离的数学框架。它定义了平方距离函数,处理了退化情况,区分了平行和非平行线段,并确定了潜在的临界点。
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
的梯度为零的位置。