trdbse
C TRDBSE SOURCE CHAT 05/01/13 03:46:00 5004 > NOETRI,COORD,ITP,IAR) C ****************************************************** C OBJET : SELECTIONNE LE TRIANGLE INCIDENT A UN NOEUD C ET QUI INTERSECTE UNE DEMI-DROITE PARTANT C DE CE NOEUD C EN ENTREE: C NN() : LES INDICES DES NOEUDS DU SEGMENT C EN SORTIE: C ITP : LE TRIANGLE INTERSECTANT NN C IAR : L'INDICE DE L'ARETE DE ITP INTERSECTEE PAR NN C NIVEAU : FICHIER C ******************************************************** IMPLICIT INTEGER(I-N) INTEGER NN(*),ITRNOE(*),NBNMAX,ITRTRI(*),NBCMAX INTEGER NOETRI(*),ITP,IAR REAL*8 COORD(*) C REAL*8 XN(4), DROITE(3), PZERO, X(2),Y(2),S1,S2 INTEGER IDE,IDIMC,I INTEGER ITPDEB,ISENS,IARDEB,N1,N2,IERR C C --- LE SEGMENT N'EST PAS RESPECTE --- IDIMC = 2 IDE = 2 DO 10 I=1,IDIMC XN(I) = COORD((NN(1)-1)*IDIMC+I) XN(IDIMC+I)= COORD((NN(2)-1)*IDIMC+I) 10 CONTINUE PZERO = 1.D-10 *((XN(3)-XN(1))**2 + (XN(4)-XN(2))**2) C CALL G2DDRO2P( XN, DROITE ) REMPLACE PAR O.STAB > COORD((NN(2)-1)*IDIMC+1),DROITE,IERR) C C --- RECHERCHE DE L'ELEMENT DE DEPART --- C -------------------------------------------- ISENS = 1 > NBCMAX,NOETRI,ITP,IAR) IF((IAR.EQ.-1).OR.(ITP.EQ.0))GO TO 999 ITPDEB = ITP IARDEB = IAR C C --- TEST D'INTERSECTION : L'ARETE OPPOSEE --- C 20 I = IAR N2 = ITRNOE((ITP-1)*NBNMAX+I) X(2) = COORD((N2-1)*IDIMC + 1) Y(2) = COORD((N2-1)*IDIMC + 2) I = MOD(I,3)+1 I = MOD(I,3)+1 N1 = ITRNOE((ITP-1)*NBNMAX+I) X(1) = COORD((N1-1)*IDIMC + 1) Y(1) = COORD((N1-1)*IDIMC + 2) C S1 = DROITE(1)*X(1)+DROITE(2)*Y(1)+DROITE(3) S2 = DROITE(1)*X(2)+DROITE(2)*Y(2)+DROITE(3) IF(((S1.GT. PZERO).AND.(S2.LT.-PZERO)).OR. > ((S1.LT.-PZERO).AND.(S2.GT. PZERO)))THEN C --- VERIFICATION DU COTE : PRSCAL > 0--- S1 = ((X(1)-XN(1))*(XN(4)-XN(2))) - > ((Y(1)-XN(2))*(XN(3)-XN(1))) S2 = ((X(1)-XN(1))*(Y(2)-Y(1))) - > ((Y(1)-XN(2))*(X(2)-X(1))) IF( (S1*S2).GT.PZERO )THEN IAR = I GOTO 999 ENDIF ENDIF C --- ON PASSE AU TRIANGLE SUIVANT --- IAR = MOD(IAR,NBCMAX)+1 IF((ITP.NE.ITPDEB ).AND.(ITP.NE.0))GOTO 20 ITP = 0 IAR = 0 999 END
© Cast3M 2003 - Tous droits réservés.
Mentions légales