Download dedans.procedur

Back to the list

   1 : * DEDANS    PROCEDUR  AM        12/06/06    21:15:00     7384           
   2 : 'DEBPROC' DEDANS P0*POINT CTR1*MAILLAGE PREC/'FLOTTANT' ;
   3 : *
   4 : * Procedure GIBIANE pour determiner si un point est à l'interieur d'un
   5 : * contour fermé orienté en dimesnion 2
   6 : * 
   7 : *    LOG1 = DEDANS P0(type POINT) CTR1(type MAILLAGE) (PREC (type FLOTTANT)) ;
   8 : *
   9 : * Si z0 est l'affixe du point P0
  10 : * On intègre la fonction complex 1/(z-z0) sur le contour,
  11 : *    d'après la théorie des résidus
  12 : *    si le point est dans le contour l'integrale vaut +/- 360
  13 : *    sinon l'intégrale vaut 0.
  14 : *
  15 : 'SI' ('NON' ('EXISTE' PREC)) ;
  16 :     PREC = 0. ;
  17 : 'FINSI' ; 
  18 : 
  19 : 
  20 : DIDI = VALE DIME ;
  21 : 'SI' ( DIDI EGA 3) ;
  22 :     ERREUR 'Fonction indisponible en dimension 3' ;
  23 : 'FINSI' ;
  24 : CTR2 = CHANGER 'SEG2' CTR1 ;
  25 : NBE1 = NBELEM CTR2 ;
  26 : X0 Y0 = COOR P0 ;
  27 : STHET0 = 0. ;
  28 : *
  29 : *  boucle sur chaque element du contour
  30 : *
  31 : 'REPETER' BLOC1 NBE1 ;
  32 :    SEGEL1 = CTR2 'ELEM' &BLOC1 ;
  33 : *     on recupère les points du seg2
  34 :    PEL1 =  SEGEL1 'POINT' 1 ;
  35 :    PEL2 =  SEGEL1 'POINT' 2 ;
  36 : *      calcule sur les coordonnés
  37 :    X1 Y1 = COOR PEL1 ;
  38 :    X2 Y2 = COOR PEL2 ;
  39 :    L1 = (X1 - X0) ** 2 + ((Y1 -Y0) ** 2) ** 0.5 ;
  40 :    L2 = (X2 - X0) ** 2 + ((Y2 -Y0) ** 2) ** 0.5 ;
  41 :    'SI' ( 'OU' (L1 <EG PREC) (L2 <EG PREC) );
  42 :        'RESPRO' VRAI ;
  43 :        'QUITTER' DEDANS ;
  44 :    'FINSI' ;
  45 :    COTH1 = (X1 - X0)*(X2 - X0) +((Y1 -Y0) * (Y2 -Y0)) / L1 / L2 ;
  46 :    SITH1 = (X1 - X0)*(Y2 -Y0) - ((Y1 -Y0) * (X2 - X0)) / L1 / L2 ;
  47 :    'SI' ( COTH1 EGA 0. ) ;
  48 :        'SI' (SITH1 > 0. ) ;
  49 :           THETA1 = 90. ;
  50 :        'SINON' ;
  51 :           THETA1 = -90. ; 
  52 :        'FINSI' ;
  53 :    'SINON' ;
  54 :        THETA1 = ATG ( SITH1 / COTH1 ) ;
  55 :        'SI' ( COTH1 < 0. ) ;
  56 :           'SI' ( SITH1 >EG 0. ) ;
  57 :               THETA1 = THETA1 + 180. ;
  58 :            'SINON' ;
  59 :                THETA1 = THETA1 - 180. ;
  60 :             'FINSI' ;
  61 :        'FINSI' ;
  62 :    'FINSI' ;
  63 :    STHET0 = STHET0 + THETA1 ;
  64 : 'FIN' BLOC1 ;
  65 : *
  66 : *
  67 : *
  68 : 'SI' ( (ABS (ABS STHET0 - 360. )) <EG 1.D-4 ) ;
  69 :     'RESPRO' VRAI ;
  70 : 'SINON' ;
  71 :     'SI' ( (ABS STHET0) <EG 1.D-4 ) ;
  72 :        'RESPRO' FAUX ;
  73 :     'SINON' ;
  74 :        'ERREUR' 28 ;
  75 :     'FINSI' ;
  76 : 'FINSI' ;
  77 : *
  78 : 'FINPROC' ;
  79 :  

© Cast3M 2003 - All rights reserved.
Disclaimer