2016-11-23 18 views
3

この関数は、2つの無限線の間の最も近い距離を計算します。有限線までの最短距離

public static double GetClosestDistanceBetweenLines(Vector3 line1Point, Vector3 line1Vector, Vector3 line2Point, Vector3 line2Vector) 
    { 
     var u = line1Vector; 
     var v = line2Vector; 
     var w = line1Point- line2Point; 

     var a = Vector3.Dot(u, u);   // always >= 0 
     var b = Vector3.Dot(u, v); 
     var c = Vector3.Dot(v, v);   // always >= 0 
     var d = Vector3.Dot(u, w); 
     var e = Vector3.Dot(v, w); 
     var D = a * c - b * b;  // always >= 0 
     double sc, tc; 

     // compute the line parameters of the two closest points 
     if (D < Epsilon) 
     {   // the lines are almost parallel 
      sc = 0.0; 
      tc = (b > c ? d/b : e/c); // use the largest denominator 
     } 
     else 
     { 
      sc = (b * e - c * d)/D; 
      tc = (a * e - b * d)/D; 
     } 

     // get the difference of the two closest points 
     var dP = w + (sc * u) - (tc * v); // = L1(sc) - L2(tc) 

     return dP.Length; // return the closest distance 
    } 

ただし、2つの有限線の間の距離を計算したいとします。

public static double GetClosestDistanceBetweenLines(Vector3 line1Point1, Vector3 line1Point2, Vector3 line2Point1, Vector3 line2Point2) 

どうすればよいですか?

+0

これは役立ちますか? http://stackoverflow.com/a/627578/106159 –

答えて

3

scとtcの2つのパラメータがあります。

両方が0..1の範囲にある場合、最も近い距離の点はセグメントの内側にあり、距離は有効です。

1つのセグメントのパラメータがこの範囲外の場合、別のセグメントからこのセグメントの適切な端までの距離を計算します。たとえば、sc <が0の場合は、sc = 0を使用します。

両方のパラメータが範囲外の場合、セグメントの端数の組み合わせの最小距離を見つけます

関連する問題