一、点到射线距离
- 点到射线距离和 点到直线距离的计算方法相似,但射线的一端具有端点,这里会有两种距离求解情况。
Condition: 点 : K K K, 线 l l l: X ( t ) = P + t ⋅ n ⃗ , n ⃗ 已经标准化 X(t)=P+t \cdot \vec{n},\vec{n}已经标准化 X(t)=P+t⋅n,n已经标准化。 case 1:
投影点Y在射线上,距离的计算与 点到直线 求解一致。
case 2:
投影点Y不在射线上,距离的计算为 ∥ K − P ∥ \left\| K-P\right\| ∥K−P∥。
综上:
D ( K , l 0 ) = { ∥ K − P ∥ 2 − ( n ⃗ ⋅ ( K − P ) ) 2 , n ⃗ ⋅ ( K − Y ) > 0 ∥ K − P ∥ 2 , n ⃗ ⋅ ( K − Y ) ≤ 0 D(K,l_0)= \left\{\begin{matrix} \left\| K-P\right\|^2 - (\vec{n}\cdot(K-P))^2 & ,\vec{n} \cdot(K-Y)>0 \\ \left\| K-P\right\|^2 & ,\vec{n} \cdot(K-Y) \leq 0 \end{matrix}\right. D(K,l0)={∥K−P∥2−(n⋅(K−P))2∥K−P∥2,n⋅(K−Y)>0,n⋅(K−Y)≤0
二、点到线段距离
-
点到射线距离和 点到直线距离的计算方法相似,但线段具有两个端点,这里会有三种距离求解情况。
Condition: 点 : K K K, 线 l 1 l_1 l1: X ( t ) = P + t ⋅ n ⃗ , n ⃗ = P 1 − P 0 未标准化 X(t)=P+t \cdot \vec{n},\vec{n}=P_1-P_0未标准化 X(t)=P+t⋅n,n=P1−P0未标准化。 -
Case 1:
投影点 Y Y Y in segment. The distance is same as point-line distance. D = ∥ K − P 0 − t ′ ⋅ n ⃗ ∥ 2 D=\left\| K-P_0-t' \cdot \vec{n}\right\|^2 D=∥K−P0−t′⋅n∥2
-
Case 2:
投影点 Y Y Y not in segment. D = ∥ K − P 0 ∥ 2 D =\left\| K-P_0\right\|^2 D=∥K−P0∥2
-
Case 3:
投影点 Y Y Y not in segment. D = ∥ K − P 1 ∥ 2 D =\left\| K-P_1\right\|^2 D=∥K−P1∥2 -
-
Note:
t ′ = n ⃗ ⋅ ( K − P ) / ∥ n ⃗ ∥ 2 t' = \vec{n} \cdot (K-P)/ \left\| \vec{n} \right\|^2 t′=n⋅(K−P)/∥n∥2, 点到直线距离。
综上:
D ( K , l 1 ) = { ∥ K − P 0 ∥ 2 , t ′ ≤ 0 ∥ K − P 0 − t ′ ⋅ n ⃗ ∥ 2 , 0 < t ′ < 1 ∥ K − P 1 ∥ 2 , t ′ ≥ 1 D(K,l_1)= \left\{\begin{matrix} \left\| K-P_0\right\|^2 & ,t' \leq 0 \\ \left\| K-P_0-t' \cdot \vec{n}\right\|^2 & ,0<t'<1 \\ \left\| K-P_1\right\|^2 & ,t' \geq1 \end{matrix}\right. D(K,l1)=⎩ ⎨ ⎧∥K−P0∥2∥K−P0−t′⋅n∥2∥K−P1∥2,t′≤0,0<t′<1,t′≥1