angle
C ANGLE SOURCE GOUNAND 26/09/03 21:15:05 12637 SUBROUTINE ANGLE(U,V,N,XANG,IFLAG,IFLIG) IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C*********************************************************************** C NOM : ANGLE C DESCRIPTION : Calcul de l'angle entre deux vecteurs (orientes en 2D) C C C C LANGAGE : ESOPE C AUTEUR : Stephane GOUNAND (CEA/DES/ISAS/DM2S/SEMT/LTA) C mel : gounand@semt2.smts.cea.fr C*********************************************************************** C SYNTAXE GIBIANE : C ENTREES : U, V, N, IFLAG C ENTREES/SORTIES : C SORTIES : XANG, IFLIG C*********************************************************************** C VERSION : v1, 02/09/2026, version initiale C HISTORIQUE : v1, 02/09/2026, creation C HISTORIQUE : C HISTORIQUE : C*********************************************************************** -INC CCREEL DIMENSION U(N),V(N) * * Executable statements * IFLIG=0 XANG=0.D0 XNU=0.D0 XNV=0.D0 DO J=1,N XNU=XNU+U(J)**2 XNV=XNV+V(J)**2 ENDDO IF(IFLAG.EQ.1) THEN IF (XNU.LT.XPETIT.OR.XNV.LT.XPETIT) GOTO 11 ELSE IF (XNU.LT.XPETIT.OR.XNV.LT.XPETIT) RETURN ENDIF XNU=SQRT(XNU) XNV=SQRT(XNV) * IF (N.EQ.1) THEN XPSCA=SIGN(1.D0,U(1)*V(1)) XANG=(XPSCA-1.D0)*(-90.D0) ELSEIF (N.EQ.2) THEN XPMIX=U(1)*V(2)-U(2)*V(1) XPSCA=U(1)*V(1)+U(2)*V(2) XANGR=ATAN2(XPMIX,XPSCA) ELSE * Formule precise due a W. Kahan * \theta = 2 \tan^{-1}\frac{| |v| u - |u| v |}{ | |v| u + |u| v |} XNUM=0.D0 XDEN=0.D0 DO J=1,N XNVU=XNV*U(J) XNUV=XNU*V(J) XNUM=XNUM+(XNVU-XNUV)**2 XDEN=XDEN+(XNVU+XNUV)**2 ENDDO XNUM=SQRT(XNUM) XDEN=SQRT(XDEN) XANGR=2.D0*ATAN2(XNUM,XDEN) ENDIF * Conversion en degrés IF (N.NE.1) XANG=XANGR*180.D0/XPI * * Normal termination * RETURN * 11 CONTINUE IFLIG=1 RETURN * * End of subroutine ANGLE * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales