distan
C DISTAN SOURCE CHAT 05/01/12 22:51:23 5004 IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) C C C C C MARQ=1 c 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 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) THEN c IF (YM.GE.YMI.AND.YM.LE.YMA) THEN c IF (ZM.GE.ZMI.AND.ZM.LE.ZMA) THEN c MARQ=0 c ENDIF c ENDIF c 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 ENDIF c if (marq.eq.0) then c write(6,*)xm,ym,zm c write(6,*)'marq',marq,'dist',d c end if RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales