clrep
C CLREP SOURCE CHAT 05/01/12 22:08:51 5004 IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO C C---------------------------------------------------------------------- C CETTE ROUTINE A PLUSIEURS FONCTION : C C 1- : C C POUR IANGLE = 0 C ================== C ON CALCULE VECX ET VECY POUR UN VECZ DONNE C C---------------------------------------------------------------------- C 2- : C C POUR IANGLE = 1 C ================= C ON CALCULE L ANGLE ( EN DEGRE ) C POUR UN REPERE ( VF1 , VF2 ET VECZ ) DONNE C PAR RAPPORT A ( VECX , VECY ET VECZ ) C C POUR IANGLE = 2 C ================= C ON CALCULE L ANGLE ( EN RADIAN ) C POUR UN REPERE ( VF1 , VF2 ET VECZ ) DONNE C PAR RAPPORT A ( VECX , VECY ET VECZ ) C C---------------------------------------------------------------------- C C 3- : C C POUR IANGLE = 3 C ================= C ON CALCULE VF1 ET VF2 POUR UN VECZ DONNE C PLUS UN ANGLE ( EN RADIAN ) DONNE C PAR RAPPORT A VECX C C---------------------------------------------------------------------- C DIMENSION VECX(*),VECY(*),VECZ(*) DIMENSION VECX0(3) C RAD=57.29577951308232D0 C USR3=1.D0/SQRT(VECZ(1)*VECZ(1)+VECZ(2)*VECZ(2)+VECZ(3)*VECZ(3)) C VECZ(1)=VECZ(1)*USR3 VECZ(2)=VECZ(2)*USR3 VECZ(3)=VECZ(3)*USR3 C IF (IANGLE.EQ.3) THEN C CO=COS(ANGLE) C C USR1=1.D0/SQRT(VECX(1)*VECX(1)+VECX(2)*VECX(2)+VECX(3)*VECX(3)) VECX(1)=VECX(1)*USR1 VECX(2)=VECX(2)*USR1 VECX(3)=VECX(3)*USR1 C VECY(1)=VECZ(2)*VECX(3)-VECZ(3)*VECX(2) VECY(2)=VECZ(3)*VECX(1)-VECZ(1)*VECX(3) VECY(3)=VECZ(1)*VECX(2)-VECZ(2)*VECX(1) C USR2=1.D0/SQRT(VECY(1)*VECY(1)+VECY(2)*VECY(2)+VECY(3)*VECY(3)) C VECY(1)=VECY(1)*USR2 VECY(2)=VECY(2)*USR2 VECY(3)=VECY(3)*USR2 C RETURN ENDIF C IF(IANGLE.EQ.0) GO TO 100 C VECX0(1)=VECX(1) VECX0(2)=VECX(2) VECX0(3)=VECX(3) USR1=1.D0/SQRT(VECX(1)*VECX(1)+VECX(2)*VECX(2)+VECX(3)*VECX(3)) C VECX0(1)=VECX0(1)*USR1 VECX0(2)=VECX0(2)*USR1 VECX0(3)=VECX0(3)*USR1 C 100 VECX(1)=-VECZ(2) VECX(2)=VECZ(1) VECX(3)=0.D0 C IF(VECX(1).EQ.0.AND.VECX(2).EQ.0.) VECX(1)=1.D0 C USR1=1.D0/SQRT(VECX(1)*VECX(1)+VECX(2)*VECX(2)) C VECX(1)=VECX(1)*USR1 VECX(2)=VECX(2)*USR1 C VECY(1)=VECZ(2)*VECX(3)-VECZ(3)*VECX(2) VECY(2)=VECZ(3)*VECX(1)-VECZ(1)*VECX(3) VECY(3)=VECZ(1)*VECX(2)-VECZ(2)*VECX(1) C USR2=1.D0/SQRT(VECY(1)*VECY(1)+VECY(2)*VECY(2)+VECY(3)*VECY(3)) C VECY(1)=VECY(1)*USR2 VECY(2)=VECY(2)*USR2 VECY(3)=VECY(3)*USR2 C IF(IANGLE.EQ.0) RETURN C CSN=VECX(1)*VECX0(1)+VECX(2)*VECX0(2)+VECX(3)*VECX0(3) SSN=VECY(1)*VECX0(1)+VECY(2)*VECX0(2)+VECY(3)*VECX0(3) ANGLE=ATAN2(SSN,CSN) IF(IANGLE.EQ.1) ANGLE=ANGLE*RAD C RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales