Numérotation des lignes :

C DISTAN    SOURCE    CHAT      05/01/12    22:51:23     5004        SUBROUTINE DISTAN(XP,XA,XB,YP,YA,YB,ZP,ZA,ZB,D,MARQ)      IMPLICIT INTEGER(I-N)        IMPLICIT REAL*8 (A-H,O-Z)CCC CC        MARQ=1c        write(6,*)xa,ya,za        IF (XA.NE.XB) THEN        XM=((XB-XA)**2*XP+(YB-YA)*(XB-XA)*YP-(ZB-ZA)*(XB*ZA-XA*ZB)+(ZB-Z     $A)*(XB-XA)*ZP-(YB-YA)*(YA*XB-YB*XA))/((XB-XA)**2+(YB-YA)**2+(ZB-Z$A)**2)         YM=((YB-YA)/(XB-XA))*XM+((YA*XB-YB*XA)/(XB-XA))        ZM=((ZB-ZA)/(XB-XA))*XM+((ZA*XB-ZB*XA)/(XB-XA))        ELSE            IF (ZA.NE.ZB) THEN               XM=XA               ZM=((YB-YA)*YP+(ZB-ZA)*ZP-YA*ZB+YB*ZA)/((ZB-ZA)+((YB-YA)     \$**2)/(ZB-ZA)+(YA*ZB-YB*ZA)*(YB-YA)/(ZB-ZA))               YM=(YB-YA)/(ZB-ZA)*ZM+(YA*ZB-YB*ZA)/(ZB-ZA)            ELSE                IF (YA.NE.YB) THEN                    XM=XA                    ZM=ZA                    YM=YP                ELSE                    CALL ERREUR(945)                END IF            END IF        END IF         D=((XP-XM)**2+(YP-YM)**2+(ZP-ZM)**2)**0.5 c        XMI=MIN(XA,XB)c        XMA=MAX(XA,XB)c        YMI=MIN(YA,YB)c        YMA=MAX(YA,YB)c        ZMI=MIN(ZA,ZB)c        ZMA=MAX(ZA,ZB)c        IF (XM.GE.XMI.AND.XM.LE.XMA) THENc           IF (YM.GE.YMI.AND.YM.LE.YMA) THENc              IF (ZM.GE.ZMI.AND.ZM.LE.ZMA) THENc                  MARQ=0c              ENDIFc           ENDIFc        ENDIF c si AM.BM négatif M est dans le segment        XYM=(XM-XA)*(XM-XB)+(YM-YA)*(YM-YB)+(ZM-ZA)*(ZM-ZB)        IF (XYM.LE.0) THEN           MARQ=0        ENDIFc        if (marq.eq.0) thenc            write(6,*)xm,ym,zmc            write(6,*)'marq',marq,'dist',dc        end if         RETURN        END

© Cast3M 2003 - Tous droits réservés.
Mentions légales