2016-11-23 117 views
3

我有这个函数计算两条无限行之间的最近距离。有限行之间的最近距离

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 
    } 

但是,我想计算两条有限行之间的距离。

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

我该怎么做?

+0

这是否有帮助? http://stackoverflow.com/a/627578/106159 –

回答

3

您有两个参数sc和tc。

如果两者都位于范围0..1内,则最近的距离点位于区段内且距离有效。

如果一个线段的参数超出此范围,请计算从另一个线段到该线段适当端点的距离。例如,如果sc < 0,则使用sc = 0。

如果两个参数都超出范围,请找出段末端组合的最小距离