Numérotation des lignes :

C INDRPO    SOURCE    CHAT      05/01/13    00:36:02     5004      SUBROUTINE INDRPO(X,Y,NBN,DROITE,PZERO,NBA,IARET,NBS,SOM)C     *****************************************************************C     OBJET : INTERSECTION D'UN POLYGONE SIMPLE AVEC UNE DROITEC     EN ENTREE :C        X,Y   : TABLEAU DES COORDONNEES DES POINTS DU POLYGONEC        NBN   : NOMBRE DE POINT DU POLYGONEC        DROITE: EQUATION DE LA DROITEC        PZERO : PRECISION DU CALCULC     EN SORTIE:C        IARET  : INDICES DES ARETES DU POLY QU'INTERSECTE DROITEC        NBA   : NOMBRE "   "    "      "    "C        SOM   : INDICES DES SOMMETS DU POLY QU'INTERSECTE DROITEC        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,ISDC       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       ENDIFC      --- 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         ELSEC        --- ON ETAIT SUR LA DROITE ---           IF( ISD.EQ.0 )THEN            IF( S.GT.PZERO )THEN              ISD = 1            ELSE              ISD = -1            ENDIF           ELSEC        ---- ON ETAIT PAS SUR LA DROITEC        ---- 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