pcone
C PCONE SOURCE PV 20/03/24 21:20:04 10554 C CE SOUS-PROGRAMME RAMENNE UN CONE SUR SES COORDONNEES PROPRES C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC SMCOORD -INC PPARAM -INC CCOPTIO SEGMENT/FER/(NFI(ITT),MAI(IPP),ITOUR) real*8 tcval(*) * tcval(1) 2 3 4 5 6 7 * SAVE XORIG,YORIG,ZORIG,XAXE,YAXE,ZAXE,ISENS,SANGS * tcval(8) 9 10 11 * SAVE XSOM,YSOM,ZSOM,CANGS IF (IOP.EQ.2) GOTO 100 IMCT=MAI(ITOUR+1) INCT=MAI(1)+1 NDEB=IMCT+1 SEGINI XPROJ SEGACT MCOORD C AXE DU CONE IREF=ISOM*4-3 XSOM=XCOOR(IREF) YSOM=XCOOR(IREF+1) ZSOM=XCOOR(IREF+2) tcval(8)=xsom tcval(9)=ysom tcval(10)=Zsom IREF=IP2*4-3 XP2=XCOOR(IREF) YP2=XCOOR(IREF+1) ZP2=XCOOR(IREF+2) XAXE=XP2-XSOM YAXE=YP2-YSOM ZAXE=ZP2-ZSOM DAXE=SQRT(XAXE**2+YAXE**2+ZAXE**2) IF (IERR.NE.0) RETURN XAXE=XAXE/DAXE YAXE=YAXE/DAXE ZAXE=ZAXE/DAXE tcval(4)=xaxe tcval(5)=yaxe tcval(6)=zaxe C DEROULONS LE CONE IREF=4*NFI(IMCT)-3 XV1=XCOOR(IREF)-XSOM YV1=XCOOR(IREF+1)-YSOM ZV1=XCOOR(IREF+2)-ZSOM PV1=XV1*XAXE+YV1*YAXE+ZV1*ZAXE XV1=XV1-PV1*XAXE YV1=YV1-PV1*YAXE ZV1=ZV1-PV1*ZAXE DV1=SQRT(XV1**2+YV1**2+ZV1**2) IF (IERR.NE.0) RETURN XV1=XV1/DV1 YV1=YV1/DV1 ZV1=ZV1/DV1 XORIG=XV1 YORIG=YV1 ZORIG=ZV1 tcval(1)=xorig tcval(2)=yorig tcval(3)=zorig ANGSOM=0 COT=0 DO 1 I=INCT,max(IMCT,mai(itour+2)) II=NFI(I) IREF=4*II-3 XV2=XCOOR(IREF)-XSOM YV2=XCOOR(IREF+1)-YSOM ZV2=XCOOR(IREF+2)-ZSOM XPROJ(1,I)=SQRT(XV2**2+YV2**2+ZV2**2) XPROJ(3,I)=XCOOR(IREF+3) XI=XPROJ(1,I) C XI EST LE RAYON EN COORDONNEES POLAIRES QU'EST L'ANGLE? DV2=SQRT(XV2**2+YV2**2+ZV2**2) IF (IERR.NE.0) RETURN XV2=XV2/DV2 YV2=YV2/DV2 ZV2=ZV2/DV2 ANG=ATAN2(XAXE*(YV1*ZV2-ZV1*YV2)+YAXE*(ZV1*XV2-XV1*ZV2)+ZAXE* # (XV1*YV2-YV1*XV2),XV1*XV2+YV1*YV2+ZV1*ZV2) COT=COT+ANG XPROJ(2,I)=COT XV1=XV2 YV1=YV2 ZV1=ZV2 1 CONTINUE CANGS=ANGSOM/(IMCT-INCT+1) SANGS=SQRT(1-CANGS**2) tcval(7)=sangs tcval(11)=cangs DO 2 I=INCT,max(IMCT,mai(itour+2)) XPROJ(2,I)=XPROJ(2,I)*SANGS RR=XPROJ(1,I) XPROJ(1,I)=RR*COS(XPROJ(2,I)) XPROJ(2,I)=RR*SIN(XPROJ(2,I)) II=NFI(I) NFI(I)=I IREF=4*II-3 XV=XCOOR(IREF)-XSOM YV=XCOOR(IREF+1)-YSOM ZV=XCOOR(IREF+2)-ZSOM DV=SQRT(XV**2+YV**2+ZV**2) RAP=CANGS/CAN 2 CONTINUE C IL FAUT TOURNER DANS LE BON SENS SURF=0 DO 3 IT=1,ITOUR II1=MAI(IT-1+1)+1 II2=MAI(IT+1) XV1=XPROJ(1,II2) YV1=XPROJ(2,II2) DO 3 I=II1,II2 XV2=XPROJ(1,I) YV2=XPROJ(2,I) IF (XPROJ(3,I).EQ.0) XPROJ(3,I)=SQRT((XV2-XV1)**2+(YV2-YV1)**2) SURF=SURF+XV1*YV2-XV2*YV1 XV1=XV2 YV1=YV2 3 CONTINUE ISENS=1 IF (SURF.GT.0.) GOTO 5 ISENS=-1 DO 4 I=INCT,max(IMCT,mai(itour+2)) XPROJ(1,I)=-XPROJ(1,I) 4 CONTINUE 5 CONTINUE RETURN C TRANSFORMATION INVERSE 100 CONTINUE xorig=tcval(1) yorig=tcval(2) zorig=tcval(3) xaxe=tcval(4) yaxe=tcval(5) zaxe=tcval(6) sangs=tcval(7) xsom=tcval(8) ysom=tcval(9) zsom=tcval(10) cangs=tcval(11) SEGACT MCOORD*mod XREP1=XORIG YREP1=YORIG ZREP1=ZORIG XREP2=YAXE*ZREP1-ZAXE*YREP1 YREP2=ZAXE*XREP1-XAXE*ZREP1 ZREP2=XAXE*YREP1-YAXE*XREP1 IF (NUMNP.LT.NDEB) GOTO 102 NBPTA=nbpts NBPTS=NBPTA+NUMNP-NDEB+1 SEGADJ MCOORD DO 101 I=NDEB,NUMNP R=SQRT(XPROJ(1,I)**2+XPROJ(2,I)**2) IF (IERR.NE.0.) RETURN ANG=ATAN2(XPROJ(2,I),XPROJ(1,I)*ISENS) XPROJ(1,I)=R XPROJ(2,I)=ANG/SANGS CO=COS(XPROJ(2,I)) XCOOR(NBPTA*4+4)=XPROJ(3,I) NBPTA=NBPTA+1 101 CONTINUE 102 CONTINUE SEGSUP XPROJ RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales