153 double p2[3],
double q2[3],
double r2[3])
155 double dp1, dq1, dr1, dp2, dq2, dr2;
158 const double eps=1e-16;
173 if (((dp1 * dq1) > 0.0f) && ((dp1 * dr1) > 0.0f))
return 0;
188 if (((dp2 * dq2) > 0.0f) && ((dp2 * dr2) > 0.0f))
return 0;
192 if (dq1 > eps)
TRI_TRI_3D(r1,p1,q1,p2,r2,q2,dp2,dr2,dq2)
193 else if (dr1 > eps)
TRI_TRI_3D(q1,r1,p1,p2,r2,q2,dp2,dr2,dq2)
194 else TRI_TRI_3D(p1,q1,r1,p2,q2,r2,dp2,dq2,dr2)
195 }
else if (dp1 < -eps) {
196 if (dq1 < -eps)
TRI_TRI_3D(r1,p1,q1,p2,q2,r2,dp2,dq2,dr2)
197 else if (dr1 < -eps)
TRI_TRI_3D(q1,r1,p1,p2,q2,r2,dp2,dq2,dr2)
198 else TRI_TRI_3D(p1,q1,r1,p2,r2,q2,dp2,dr2,dq2)
201 if (dr1 >= eps)
TRI_TRI_3D(q1,r1,p1,p2,r2,q2,dp2,dr2,dq2)
202 else TRI_TRI_3D(p1,q1,r1,p2,q2,r2,dp2,dq2,dr2)
204 else if (dq1 > eps) {
205 if (dr1 > eps)
TRI_TRI_3D(p1,q1,r1,p2,r2,q2,dp2,dr2,dq2)
206 else TRI_TRI_3D(q1,r1,p1,p2,q2,r2,dp2,dq2,dr2)
209 if (dr1 > eps)
TRI_TRI_3D(r1,p1,q1,p2,q2,r2,dp2,dq2,dr2)
210 else if (dr1 < -eps)
TRI_TRI_3D(r1,p1,q1,p2,r2,q2,dp2,dr2,dq2)
217 double p2[3],
double q2[3],
double r2[3],
218 double normal_1[3],
double[3]) {
220 double P1[2],Q1[2],R1[2];
221 double P2[2],Q2[2],R2[2];
223 double n_x, n_y, n_z;
225 n_x = ((normal_1[0]<0)?-normal_1[0]:normal_1[0]);
226 n_y = ((normal_1[1]<0)?-normal_1[1]:normal_1[1]);
227 n_z = ((normal_1[2]<0)?-normal_1[2]:normal_1[2]);
233 if (( n_x > n_z ) && ( n_x >= n_y )) {
235 P1[0] = q1[2]; P1[1] = q1[1];
236 Q1[0] = p1[2]; Q1[1] = p1[1];
237 R1[0] = r1[2]; R1[1] = r1[1];
239 P2[0] = q2[2]; P2[1] = q2[1];
240 Q2[0] = p2[2]; Q2[1] = p2[1];
241 R2[0] = r2[2]; R2[1] = r2[1];
243 }
else if (( n_y > n_z ) && ( n_y >= n_x )) {
245 P1[0] = q1[0]; P1[1] = q1[2];
246 Q1[0] = p1[0]; Q1[1] = p1[2];
247 R1[0] = r1[0]; R1[1] = r1[2];
249 P2[0] = q2[0]; P2[1] = q2[2];
250 Q2[0] = p2[0]; Q2[1] = p2[2];
251 R2[0] = r2[0]; R2[1] = r2[2];
255 P1[0] = p1[0]; P1[1] = p1[1];
256 Q1[0] = q1[0]; Q1[1] = q1[1];
257 R1[0] = r1[0]; R1[1] = r1[1];
259 P2[0] = p2[0]; P2[1] = p2[1];
260 Q2[0] = q2[0]; Q2[1] = q2[1];
261 R2[0] = r2[0]; R2[1] = r2[1];
388 double p2[3],
double q2[3],
double r2[3],
390 double source[3],
double target[3])
393 double dp1, dq1, dr1, dp2, dq2, dr2;
394 double v1[3], v2[3], v[3];
395 double N1[3], N2[3], N[3];
411 if (((dp1 * dq1) > 0.0f) && ((dp1 * dr1) > 0.0f))
return 0;
426 if (((dp2 * dq2) > 0.0f) && ((dp2 * dr2) > 0.0f))
return 0;
433 }
else if (dp1 < 0.0f) {
442 else if (dq1 > 0.0f) {