100 float p13[3],p43[3],p21[3];
101 double d1343,d4321,d1321,d4343,d2121;
103 const float EPS=1.E-6;
105 p13[0] = p1[0] - p3[0];
106 p13[1] = p1[1] - p3[1];
107 p13[2] = p1[2] - p3[2];
108 p43[0] = p4[0] - p3[0];
109 p43[1] = p4[1] - p3[1];
110 p43[2] = p4[2] - p3[2];
111 if (TMath::Abs(p43[0]) < EPS &&
112 TMath::Abs(p43[1]) < EPS &&
113 TMath::Abs(p43[2]) < EPS)
return false;
114 p21[0] = p2[0] - p1[0];
115 p21[1] = p2[1] - p1[1];
116 p21[2] = p2[2] - p1[2];
117 if (TMath::Abs(p21[0]) < EPS &&
118 TMath::Abs(p21[1]) < EPS &&
119 TMath::Abs(p21[2]) < EPS)
return false;
121 d1343 = p13[0] * p43[0] + p13[1] * p43[1] + p13[2] * p43[2];
122 d4321 = p43[0] * p21[0] + p43[1] * p21[1] + p43[2] * p21[2];
123 d1321 = p13[0] * p21[0] + p13[1] * p21[1] + p13[2] * p21[2];
124 d4343 = p43[0] * p43[0] + p43[1] * p43[1] + p43[2] * p43[2];
125 d2121 = p21[0] * p21[0] + p21[1] * p21[1] + p21[2] * p21[2];
128 denom = d2121 * d4343 - d4321 * d4321;
129 if (TMath::Abs(denom) < EPS)
return false;
131 numer = d1343 * d4321 - d1321 * d4343;
134 mub = (d1343 + d4321 * (mua)) / d4343;
136 pa[0] = p1[0] + mua * p21[0];
137 pa[1] = p1[1] + mua * p21[1];
138 pa[2] = p1[2] + mua * p21[2];
139 pb[0] = p3[0] + mub * p43[0];
140 pb[1] = p3[1] + mub * p43[1];
141 pb[2] = p3[2] + mub * p43[2];