1 : C IN2DAN SOURCE PV 07/10/05 21:16:01 5890 2 : LOGICAL FUNCTION IN2DAN(IP1,IP2,I1,I2,I3,PM1,PM2) 3 : * 4 : * verifie si le segment ip1 ip2 passe a l'interieur du triangle 5 : * i1,i2,i3. pm1 et pm2 sont les produits mixes deja calcules 6 : * 7 : IMPLICIT INTEGER(I-N) 8 : IMPLICIT REAL*8(A-H,O-Z) 9 : -INC CCREEL 10 : -INC CCOPTIO 11 : -INC TDEMAIT 12 : in2dan = .false. 13 : * calcul du point d'intersection : 14 : xp=(pm2*xyz(1,ip1)-pm1*xyz(1,ip2))/(pm2-pm1) 15 : yp=(pm2*xyz(2,ip1)-pm1*xyz(2,ip2))/(pm2-pm1) 16 : zp=(pm2*xyz(3,ip1)-pm1*xyz(3,ip2))/(pm2-pm1) 17 : * write (6,*) ' in2dan pt inter ',xp,yp,zp 18 : * write (6,*) ' in2dan i1 ',xyz(1,i1),xyz(2,i1),xyz(3,i1) 19 : * write (6,*) ' in2dan i2 ',xyz(1,i2),xyz(2,i2),xyz(3,i2) 20 : * write (6,*) ' in2dan i3 ',xyz(1,i3),xyz(2,i3),xyz(3,i3) 21 : * calcul des produits scalaires par rapport au trois cotes 22 : xv1=xyz(1,i1)-xp 23 : yv1=xyz(2,i1)-yp 24 : zv1=xyz(3,i1)-zp 25 : xv2=xyz(1,i2)-xp 26 : yv2=xyz(2,i2)-yp 27 : zv2=xyz(3,i2)-zp 28 : xv3=xyz(1,i3)-xp 29 : yv3=xyz(2,i3)-yp 30 : zv3=xyz(3,i3)-zp 31 : * vecteur normal 32 : xn=(yv2-yv1)*(zv3-zv2)-(zv2-zv1)*(yv3-yv2) 33 : yn=(zv2-zv1)*(xv3-xv2)-(xv2-xv1)*(zv3-zv2) 34 : zn=(xv2-xv1)*(yv3-yv2)-(yv2-yv1)*(xv3-xv2) 35 : * write (6,*) ' in2dan vct norm ',xn,yn,zn 36 : * produits mixtes 37 : sc1=xn*(yv2*zv3-yv3*zv2)+yn*(zv2*xv3-zv3*xv2)+zn*(xv2*yv3-xv3*yv2) 38 : sc2=xn*(yv3*zv1-yv1*zv3)+yn*(zv3*xv1-zv1*xv3)+zn*(xv3*yv1-xv1*yv3) 39 : sc3=xn*(yv1*zv2-yv2*zv1)+yn*(zv1*xv2-zv2*xv1)+zn*(xv1*yv2-xv2*yv1) 40 : * tests 41 : * if (sc1*sc2.gt.1e-30.and.sc2*sc3.gt.1e-30) then 42 : if (sc1*sc2.gt.1e-30.and.sc2*sc3.gt.xpetit) then 43 : * write (6,*) 'in2dan rate' 44 : in2dan = .true. 45 : endif 46 : return 47 : end 48 : 49 : 50 : 51 :
© Cast3M 2003 - All rights reserved.
Disclaimer