2016-11-23 1 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을 사용합니다.

두 매개 변수가 모두 범위를 벗어난 경우 세그먼트 끝 조합의 가장 작은 거리를 찾으십시오.

관련 문제