I need to compute the distance between two line segments in a project. After googling, I found this algorithm and used it to implement a Mathematica version:
distSegToSeg[{p1_, p2_}, {q1_, q2_}] := Module[{small = 10^(-6), u, v, w, a, b, c, d, e, D, sc, sN, sD, tc, tN, tD}, u = p2 - p1; v = q2 - q1; w = p1 - q1; a = u.u; b = u.v; c = v.v; d = u.w; e = v.w; D = a*c - b*b; sD = D; tD = D; If[D < small, sN = 0; sD = 1; tN = e; tD = c, sN = b*e - c*d; tN = (a*e - b*d); If[sN < 0, sN = 0.0; tN = e; tD = c, If[sN > sD, sN = sD; tN = e + b; tD = c;]]]; If[tN < 0, tN = 0; If[-d < 0, sN = 0, If[-d > a, sN = sD, sN = -d; sD = a]], If[tN > tD, tN = tD; If[-d + b < 0, sN = 0, If[-d + b > a, sN = sD, sN = -d + b; sD = a]]]]; sc = If[Norm[sN] < small, 0, sN/sD]; tc = If[Norm[tN] < small, 0, tN/tD]; N[Norm[w + sc*u - tc*v]] ] The code is not in good Mathematica style, and it's very slow. Do you have any idea to make this faster? Do you have a better way to compute the distance between two line segments in 3D?
