* DEDANS PROCEDUR AM 12/06/06 21:15:00 7384 * * Procedure GIBIANE pour determiner si un point est à l'interieur d'un * contour fermé orienté en dimesnion 2 * * LOG1 = DEDANS P0(type POINT) CTR1(type MAILLAGE) (PREC (type FLOTTANT)) ; * * Si z0 est l'affixe du point P0 * On intègre la fonction complex 1/(z-z0) sur le contour, * d'après la théorie des résidus * si le point est dans le contour l'integrale vaut +/- 360 * sinon l'intégrale vaut 0. * 'FINSI' ; 'SI' ( DIDI EGA 3) ; ERREUR 'Fonction indisponible en dimension 3' ; 'FINSI' ; CTR2 = CHANGER 'SEG2' CTR1 ; NBE1 = NBELEM CTR2 ; STHET0 = 0. ; * * boucle sur chaque element du contour * 'REPETER' BLOC1 NBE1 ; * on recupère les points du seg2 PEL1 = SEGEL1 'POINT' 1 ; PEL2 = SEGEL1 'POINT' 2 ; * calcule sur les coordonnés L1 = (X1 - X0) ** 2 + ((Y1 -Y0) ** 2) ** 0.5 ; L2 = (X2 - X0) ** 2 + ((Y2 -Y0) ** 2) ** 0.5 ; 'RESPRO' VRAI ; 'FINSI' ; COTH1 = (X1 - X0)*(X2 - X0) +((Y1 -Y0) * (Y2 -Y0)) / L1 / L2 ; SITH1 = (X1 - X0)*(Y2 -Y0) - ((Y1 -Y0) * (X2 - X0)) / L1 / L2 ; 'SI' ( COTH1 EGA 0. ) ; 'SI' (SITH1 > 0. ) ; THETA1 = 90. ; 'SINON' ; THETA1 = -90. ; 'FINSI' ; 'SINON' ; THETA1 = ATG ( SITH1 / COTH1 ) ; 'SI' ( COTH1 < 0. ) ; 'SI' ( SITH1 >EG 0. ) ; THETA1 = THETA1 + 180. ; 'SINON' ; THETA1 = THETA1 - 180. ; 'FINSI' ; 'FINSI' ; 'FINSI' ; STHET0 = STHET0 + THETA1 ; 'FIN' BLOC1 ; * * * 'SI' ( (ABS (ABS STHET0 - 360. )) <EG 1.D-4 ) ; 'RESPRO' VRAI ; 'SINON' ; 'SI' ( (ABS STHET0) <EG 1.D-4 ) ; 'RESPRO' FAUX ; 'SINON' ; 'ERREUR' 28 ; 'FINSI' ; 'FINSI' ; * 'FINPROC' ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales