1 : C CLREP SOURCE CHAT 05/01/12 22:08:51 5004 2 : SUBROUTINE CLREP(VECX,VECY,VECZ,ANGLE,IANGLE) 3 : IMPLICIT INTEGER(I-N) 4 : IMPLICIT REAL*8 (A-H,O-Z) 5 : -INC CCOPTIO 6 : C 7 : C---------------------------------------------------------------------- 8 : C CETTE ROUTINE A PLUSIEURS FONCTION : 9 : C 10 : C 1- : 11 : C 12 : C POUR IANGLE = 0 13 : C ================== 14 : C ON CALCULE VECX ET VECY POUR UN VECZ DONNE 15 : C 16 : C---------------------------------------------------------------------- 17 : C 2- : 18 : C 19 : C POUR IANGLE = 1 20 : C ================= 21 : C ON CALCULE L ANGLE ( EN DEGRE ) 22 : C POUR UN REPERE ( VF1 , VF2 ET VECZ ) DONNE 23 : C PAR RAPPORT A ( VECX , VECY ET VECZ ) 24 : C 25 : C POUR IANGLE = 2 26 : C ================= 27 : C ON CALCULE L ANGLE ( EN RADIAN ) 28 : C POUR UN REPERE ( VF1 , VF2 ET VECZ ) DONNE 29 : C PAR RAPPORT A ( VECX , VECY ET VECZ ) 30 : C 31 : C---------------------------------------------------------------------- 32 : C 33 : C 3- : 34 : C 35 : C POUR IANGLE = 3 36 : C ================= 37 : C ON CALCULE VF1 ET VF2 POUR UN VECZ DONNE 38 : C PLUS UN ANGLE ( EN RADIAN ) DONNE 39 : C PAR RAPPORT A VECX 40 : C 41 : C---------------------------------------------------------------------- 42 : C 43 : DIMENSION VECX(*),VECY(*),VECZ(*) 44 : DIMENSION VECX0(3) 45 : C 46 : RAD=57.29577951308232D0 47 : C 48 : USR3=1.D0/SQRT(VECZ(1)*VECZ(1)+VECZ(2)*VECZ(2)+VECZ(3)*VECZ(3)) 49 : C 50 : VECZ(1)=VECZ(1)*USR3 51 : VECZ(2)=VECZ(2)*USR3 52 : VECZ(3)=VECZ(3)*USR3 53 : C 54 : IF (IANGLE.EQ.3) THEN 55 : C 56 : CO=COS(ANGLE) 57 : SI=SIN(ANGLE) 58 : C 59 : VECX(1)=VECX(1)*CO+VECY(1)*SI 60 : VECX(2)=VECX(2)*CO+VECY(2)*SI 61 : VECX(3)=VECX(3)*CO+VECY(3)*SI 62 : C 63 : USR1=1.D0/SQRT(VECX(1)*VECX(1)+VECX(2)*VECX(2)+VECX(3)*VECX(3)) 64 : VECX(1)=VECX(1)*USR1 65 : VECX(2)=VECX(2)*USR1 66 : VECX(3)=VECX(3)*USR1 67 : C 68 : VECY(1)=VECZ(2)*VECX(3)-VECZ(3)*VECX(2) 69 : VECY(2)=VECZ(3)*VECX(1)-VECZ(1)*VECX(3) 70 : VECY(3)=VECZ(1)*VECX(2)-VECZ(2)*VECX(1) 71 : C 72 : USR2=1.D0/SQRT(VECY(1)*VECY(1)+VECY(2)*VECY(2)+VECY(3)*VECY(3)) 73 : C 74 : VECY(1)=VECY(1)*USR2 75 : VECY(2)=VECY(2)*USR2 76 : VECY(3)=VECY(3)*USR2 77 : C 78 : RETURN 79 : ENDIF 80 : C 81 : IF(IANGLE.EQ.0) GO TO 100 82 : C 83 : VECX0(1)=VECX(1) 84 : VECX0(2)=VECX(2) 85 : VECX0(3)=VECX(3) 86 : USR1=1.D0/SQRT(VECX(1)*VECX(1)+VECX(2)*VECX(2)+VECX(3)*VECX(3)) 87 : C 88 : VECX0(1)=VECX0(1)*USR1 89 : VECX0(2)=VECX0(2)*USR1 90 : VECX0(3)=VECX0(3)*USR1 91 : C 92 : 100 VECX(1)=-VECZ(2) 93 : VECX(2)=VECZ(1) 94 : VECX(3)=0.D0 95 : C 96 : IF(VECX(1).EQ.0.AND.VECX(2).EQ.0.) VECX(1)=1.D0 97 : C 98 : USR1=1.D0/SQRT(VECX(1)*VECX(1)+VECX(2)*VECX(2)) 99 : C 100 : VECX(1)=VECX(1)*USR1 101 : VECX(2)=VECX(2)*USR1 102 : C 103 : VECY(1)=VECZ(2)*VECX(3)-VECZ(3)*VECX(2) 104 : VECY(2)=VECZ(3)*VECX(1)-VECZ(1)*VECX(3) 105 : VECY(3)=VECZ(1)*VECX(2)-VECZ(2)*VECX(1) 106 : C 107 : USR2=1.D0/SQRT(VECY(1)*VECY(1)+VECY(2)*VECY(2)+VECY(3)*VECY(3)) 108 : C 109 : VECY(1)=VECY(1)*USR2 110 : VECY(2)=VECY(2)*USR2 111 : VECY(3)=VECY(3)*USR2 112 : C 113 : IF(IANGLE.EQ.0) RETURN 114 : C 115 : CSN=VECX(1)*VECX0(1)+VECX(2)*VECX0(2)+VECX(3)*VECX0(3) 116 : SSN=VECY(1)*VECX0(1)+VECY(2)*VECX0(2)+VECY(3)*VECX0(3) 117 : ANGLE=ATAN2(SSN,CSN) 118 : IF(IANGLE.EQ.1) ANGLE=ANGLE*RAD 119 : C 120 : RETURN 121 : END 122 :
© Cast3M 2003 - All rights reserved.
Disclaimer