| 85 | Q = P + n; |
| 86 | return true; } |
| 87 | double line_line_distance(L(A, B), L(C, D), point3d &E, |
| 88 | point3d &F) { |
| 89 | point3d w = (C-A), v = (B-A), u = (D-C), |
| 90 | N = v*u, N1 = v*(u*v), N2 = u*(v*u); |
| 91 | if (w.isZero() || (v*w).isZero()) E = F = A; |
| 92 | else if (N.isZero()) E = A, |
| 93 | F = A + w - v * ((w%v)/(v%v)); |
| 94 | else E = A + v*((w % N2)/(v%N2)), |
| 95 | F = C + u*(((-w) % N1)/(u%N1)); |
| 96 | return (F-E).length(); } |
| 97 | // vim: cc=60 ts=2 sts=2 sw=2: |