13 using namespace mathfce;
21 double U[ 3 ], V[ 3 ];
38 for (
int i = 0; i < 3; i++) {
48 for (
int i = 0; i < 3; i++) {
49 if ((i != r1) && !
IsZero(U[ i ])) {
53 if ((i != r2) && !
IsZero(V[ i ])) {
60 if ((r1 == -1) || (r2 == -1)) {
66 for (
int i = 0; i < 3; i++) {
67 if ((r1 != i) && (r2 != i)) {
74 A.
Set(1, 2, -V[ r1 ]);
76 A.
Set(2, 2, -V[ r2 ]);
147 }
else if ( pos ==
same ) {
154 if (dot_product < 0 ) {
161 double loc_begin_A1, loc_end_A1, loc_begin_A2, loc_end_A2;
179 double X1, X2, Y1, Y2;
181 if ((loc_begin_A2 < 0) && (loc_end_A2 < 0)) {
186 if ((loc_begin_A2 < 0) && (loc_end_A2 > 0) && (loc_end_A2 < 1)) {
193 if ((loc_begin_A2 > 0) && (loc_end_A2 > 0) && (loc_end_A2 < 1)) {
200 if ((loc_begin_A2 > 0) && (loc_begin_A2 < 1) && (loc_end_A2 > 1)) {
207 if ((loc_begin_A2 > 1) && (loc_end_A2 > 1)) {
212 if ((loc_begin_A2 < 0) && (loc_end_A2 > 1)) {
268 }
else if ( pos ==
same ) {
287 double loc_begin_A, loc_end_A;
288 loc_begin_A = (t1 > 0) ? t1 : 0;
289 loc_end_A = (t2 < 1) ? t2 : 1;
322 TPosition &pos,
double &t1,
double &t2) {
333 TPosition &pos,
double &t1,
double &t2) {
343 TPosition &pos,
double &t2,
double &t1) {
358 sqrt(pow(P.
GetA(), 2) + pow(P.
GetB(), 2) + pow(P.
GetC(), 2));
364 dis = sqrt(pow(P1.
X() - P2.
X(), 2) + pow(P1.
Y() - P2.
Y(), 2) +
365 pow(P1.
Z() - P2.
Z(), 2));
389 for (i = 1; i <= 3; i++)
394 u1 = v1 = u2 = v2 = -1;
422 for (i = 1; i <= 3; i++) {
436 if (u1 != -1 && v1 != -1)
464 for (i = 1; i <= 3; i++) {
471 aa(i-1,1) = (-P.
GetU().
Get(i));
472 aa(i-1,2) = (-P.
GetV().
Get(i));
475 arma::solve(xx, aa, bb);
626 loc_tria_coord_01[0]=0;
627 loc_tria_coord_01[1]=0;
629 loc_tria_coord_02[0]=1;
630 loc_tria_coord_02[1]=0;
632 loc_tria_coord_03[0]=0;
633 loc_tria_coord_03[1]=1;
637 if (insec_tmp != NULL) {
663 if (insec_tmp != NULL) {
684 if (insec_tmp != NULL) {
711 if (*(insec_point_tmp[0]) == *(insec_point_tmp[0])) {
715 for (
int i = 0; i < cit; i++) {
716 if (*(insec_point_tmp[i]) == *(insec_point_tmp[(i+1)%3])) {
721 delete insec_point_tmp[(i+1)%3];
727 insec_point_tmp[0] = insec_point_tmp[i];
728 insec_point_tmp[1] = tmp;
734 THROW( ExcAssertMsg() << EI_Message(
"Error - pocet bodu pruniku != 2.\n") );
737 if (*(insec_point_tmp[0]) == *(insec_point_tmp[1])) {
741 delete insec_point_tmp[1];
784 if (t1 < 0 - epsilon || t1 > 1 +
epsilon) {
808 if (A1_t < 0) A1_t = 0;
809 if (A2_t > 1) A2_t = 1;
945 coef = fabs(tt[1] - tt[0]);
952 for (
int i = 1; i <= 4; i++) {
966 if (tt1 < 0) tt1 = 0;
967 if (tt2 > 1) tt2 = 1;
968 coef = fabs(tt2 - tt1);
988 if (tt[0] < 0) tt[0] = 0;
989 if (tt[1] > 1) tt[1] = 1;
990 coef = fabs(tt[1] - tt[0]);
1015 for (
int i = 1; i <= 3; i++) {
1024 for (
int i = 1; i <= 3; i++) {
1025 for (
int j = 1; j <= 4; j++) {
1045 for (
int i = 1; i <= 6; i++) {
1079 for (
int i = 1; i <= 3; i++) {
1081 if (a.GetMin(i) > b.GetMax(i) +
epsilon || a.GetMax(i) < b.GetMin(i) -
epsilon) {