indrpo
C INDRPO SOURCE CHAT 05/01/13 00:36:02 5004 C ***************************************************************** C OBJET : INTERSECTION D'UN POLYGONE SIMPLE AVEC UNE DROITE C EN ENTREE : C X,Y : TABLEAU DES COORDONNEES DES POINTS DU POLYGONE C NBN : NOMBRE DE POINT DU POLYGONE C DROITE: EQUATION DE LA DROITE C PZERO : PRECISION DU CALCUL C EN SORTIE: C IARET : INDICES DES ARETES DU POLY QU'INTERSECTE DROITE C NBA : NOMBRE " " " " " C SOM : INDICES DES SOMMETS DU POLY QU'INTERSECTE DROITE C NBS : NOMBRE " " " " " C ***************************************************************** IMPLICIT INTEGER(I-N) INTEGER NBN,NBA,NBS,IARET(*),SOM(*) REAL*8 X(*),Y(*),PZERO REAL*8 DROITE(3) C REAL*8 S INTEGER K,K2,ISD C NBS = 0 NBA = 0 S = DROITE(1)*X(1)+DROITE(2)*Y(1)+DROITE(3) C --- TEST DU PREMIER SOMMET --- IF((S.LT.PZERO).AND.(S.GT.-PZERO))THEN NBS = NBS + 1 SOM(NBS) = 1 ISD = 0 ELSE IF( S.GT.PZERO )THEN ISD = 1 ELSE ISD = -1 ENDIF ENDIF C --- TEST DES ARETES --- DO 20 K=1,NBN K2 = MOD(K,NBN)+1 S = DROITE(1)*X(K2)+DROITE(2)*Y(K2)+DROITE(3) C --- LE SOMMET K+1 EST SUR LA DROITE --- IF((S.LT.PZERO).AND.(S.GT.-PZERO))THEN NBS = NBS + 1 SOM(NBS) = K2 ISD = 0 ELSE C --- ON ETAIT SUR LA DROITE --- IF( ISD.EQ.0 )THEN IF( S.GT.PZERO )THEN ISD = 1 ELSE ISD = -1 ENDIF ELSE C ---- ON ETAIT PAS SUR LA DROITE C ---- ET ON CHANGE DE COTE --- IF((S*ISD).LT.-PZERO)THEN ISD = -ISD NBA=NBA+1 IARET(NBA)=K ENDIF ENDIF ENDIF IF(K.NE.0)S=DROITE(1)*X(K)+DROITE(2)*Y(K)+DROITE(3) 20 CONTINUE 999 END
© Cast3M 2003 - Tous droits réservés.
Mentions légales