5 * Revision 1.1.1.1 1995/10/24 10:19:41 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.31 by S.Giani
12 SUBROUTINE CGBFIT(FACE,ABCD,NT)
13 ************************************************************************
16 * Author: E. Chernyaev Date: 15.03.89 *
17 * Revised: S.Giani 1992 *
19 * Function: Find all intersection points of face with plane *
23 * Input: FACE(*) - face *
26 * Output: NT - number of intersections *
29 ************************************************************************
30 #include "geant321/cggpar.inc"
31 #include "geant321/cgcedg.inc"
32 #include "geant321/cgdelt.inc"
34 #if !defined(CERNLIB_SINGLE)
35 DOUBLE PRECISION A,B,C,D
38 DATA KCG/KCGX1,KCGY1,KCGZ1,KCGX2,KCGY2,KCGZ2/
47 XDELT = FACE(KCGBB)*C - B*FACE(KCGCC)
48 YDELT = FACE(KCGCC)*A - C*FACE(KCGAA)
49 ZDELT = FACE(KCGAA)*B - A*FACE(KCGBB)
51 IF (ABS(YDELT) .GT. ABS(XDELT)) K = 2
52 IF (ABS(ZDELT) .GT. ABS(DELTA(K))) K = 3
53 IF(ABS(DELTA(K)).LT.ERROR)RETURN
55 DELTA(1) = DELTA(1) * DD
56 DELTA(2) = DELTA(2) * DD
57 DELTA(3) = DELTA(3) * DD
60 * F I N D I N T E R S E C T I O N S P O I N T S
66 D1 = A*FACE(J+KCGX1) + B*FACE(J+KCGY1) + C*FACE(J+KCGZ1) + D
67 D2 = A*FACE(J+KCGX2) + B*FACE(J+KCGY2) + C*FACE(J+KCGZ2) + D
68 IF (ABS(D1) .LE. ERROR) D1 = 0.
69 IF (ABS(D2) .LE. ERROR) D2 = 0.
70 IF (D1*D2 .GT. 0.) GOTO 600
72 IF (D1.EQ.0. .AND. D2.EQ.0.) GOTO 500
73 IF (D1.LT.0. .OR. D2.GT.0.) TTT(2,NT) =-1.
74 IF (D1.GT.0. .OR. D2.LT.0.) TTT(2,NT) =+1.
75 * D 1 O R D 2 I S N O T Z E R O
76 IF (NT .NE. 1) GOTO 400
77 XA = (D2*FACE(J+KCGX1)-D1*FACE(J+KCGX2)) / (D2 - D1)
78 YA = (D2*FACE(J+KCGY1)-D1*FACE(J+KCGY2)) / (D2 - D1)
79 ZA = (D2*FACE(J+KCGZ1)-D1*FACE(J+KCGZ2)) / (D2 - D1)
82 400 X = (D2*FACE(J+KCG1)-D1*FACE(J+KCG2)) / (D2 - D1)
83 TTT(1,NT) = (X - AA(K)) / DELTA(K)
85 * D 1 A N D D 2 B O T H A R E Z E R O
86 500 IF (NT .NE. 1) GOTO 510
94 TTT(1,NT) = (X - AA(K)) / DELTA(K)
98 TTT(1,NT) = (X - AA(K)) / DELTA(K)
100 IF (TTT(1,NT) .GT. TTT(1,NT-1)) GOTO 600