Download @p_voro.procedur

Back to the list

   1 : * @P_VORO   PROCEDUR  PASCAL    12/10/18    21:15:02     7532           
   2 : * PROCEDURE @P_VORO                                                   *
   3 : *---------------------------------------------------------------------*
   4 : * NOM         : @P_VORO                                               *
   5 : *                                                                     *
   6 : * DESCRIPTION : Construit la partition de Voronoi d'un ensemble de    *
   7 : *               points (maillage de POI1). S'appuie sur une triangu-  *
   8 : *               -lation de cet ensemble de points dans une boite de   *
   9 : *               dimension finie, ce qui permet de construire les      *
  10 : *               polyedres associes a leur enveloppe convexe.          *
  11 : *                                                                     *
  12 : * SYNTAXE     : TAB1 = @P_VORO MPOI1 (FLOT1) (ILOG1) ;                *
  13 : *                                                                     *
  14 : *    - MPOI1  = MAILLAGE, nuage de points (POI1) ;                    *
  15 : *    - FLOT1  = FLOTTANT, rapport de la taille de la boite de         *
  16 : *               triangulation sur la dimension du nuage de points ;   *
  17 : *    - ILOG1  = LOGIQUE, mettre a VRAI pour activer TRAC.             *
  18 : *    - TAB1   = TABLE, dont chaque indice est un point de MPOI1, dont *
  19 : *               le sous-indice 'MAV' contient le Maillage des Aretes  *
  20 : *               du polyedre de Voronoi associe a ce point et le sous- *
  21 : *               indice 'MPT' celui des Points de la Triangulation     *
  22 : *               adjacents a chaque face de ce polyedre.               *
  23 : *               De plus, l'indice 'MAV' de la table contient le       *
  24 : *               Maillage des Aretes de tous les polyedres et l'indice *
  25 : *               'MPT', le maillage MPOI1.                             *
  26 : *                                                                     *
  27 : * LANGAGE     : GIBIANE-CAST3M                                        *
  28 : * AUTEUR      : S. PASCAL (CEA/DEN/DM2S/SEMT/LM2S)                    *
  29 : * COURRIEL    : serge.pascal@cea.fr                                   *
  30 : *---------------------------------------------------------------------*
  31 : * VERSION    : v1, 11/04/2007, version initiale                       *
  32 : * HISTORIQUE : v1, 11/04/2007, creation                               *
  33 : * HISTORIQUE :                                                        *
  34 : * HISTORIQUE :                                                        *
  35 : *---------------------------------------------------------------------*
  36 : * Priere de PRENDRE LE TEMPS de completer les commentaires            *
  37 : * en cas de modification de ce sous-programme afin de faciliter       *
  38 : * la maintenance !                                                    *
  39 : *---------------------------------------------------------------------*
  40 : 'DEBP' @P_VORO ;
  41 : *                                                                     *
  42 : *----------------------- Lecture des arguments -----------------------*
  43 : *                                                                     *
  44 : 'ARGU' MPOI1*'MAILLAGE' ;
  45 : *                                                                     *
  46 : * Taille de la boite de triangulation :                               *
  47 : 'ARGU' XBOI1/'FLOTTANT' ;
  48 : 'SI' ('NON' ('EXIS' XBOI1)) ;
  49 :   XBOI1    = 5. ;
  50 : 'FINS' ;
  51 : *                                                                     *
  52 : 'ARGU' IVISU1/'LOGIQUE' ;
  53 : 'SI' ('NON' ('EXIS' IVISU1)) ;
  54 :   IVISU1   = FAUX ;
  55 : 'FINS' ;
  56 : *                                                                     *
  57 : *----------------- Triangulation du nuage de points ------------------*
  58 : *                                                                      *
  59 : CHX1 CHY1 CHZ1 = MPOI1 'COOR' ;
  60 : XMIN1 XMAX1 = ('MINI' CHX1) ('MAXI' CHX1) ;
  61 : YMIN1 YMAX1 = ('MINI' CHY1) ('MAXI' CHY1) ;
  62 : ZMIN1 ZMAX1 = ('MINI' CHZ1) ('MAXI' CHZ1) ;
  63 : PBARY1   = 'BARY' MPOI1 ;
  64 : PXXX1    = XBOI1 * ((XMAX1 - XMIN1) 0. 0.) ;
  65 : PYYY1    = XBOI1 * (0. (YMAX1 - YMIN1) 0.) ;
  66 : PZZZ1    = XBOI1 * (0. 0. (ZMAX1 - ZMIN1)) ;
  67 : MPOI2    = MPOI1 'ET' (PBARY1 'PLUS' PXXX1 'PLUS' PYYY1 'PLUS' PZZZ1)
  68 :                  'ET' (PBARY1 'PLUS' PXXX1 'PLUS' PYYY1 'MOIN' PZZZ1)
  69 :                  'ET' (PBARY1 'PLUS' PXXX1 'MOIN' PYYY1 'PLUS' PZZZ1)
  70 :                  'ET' (PBARY1 'PLUS' PXXX1 'MOIN' PYYY1 'MOIN' PZZZ1)
  71 :                  'ET' (PBARY1 'MOIN' PXXX1 'PLUS' PYYY1 'PLUS' PZZZ1)
  72 :                  'ET' (PBARY1 'MOIN' PXXX1 'PLUS' PYYY1 'MOIN' PZZZ1) 
  73 :                  'ET' (PBARY1 'MOIN' PXXX1 'MOIN' PYYY1 'PLUS' PZZZ1)
  74 :                  'ET' (PBARY1 'MOIN' PXXX1 'MOIN' PYYY1 'MOIN' PZZZ1) ;
  75 : *Trac (MPOI2 'ET' (MPOI1 'COUL' viol)) ;
  76 : *                                                                     *
  77 : MTRIA1   = 'TRIA' MPOI2 ;
  78 : 'SI' IVISU1 ;
  79 :   'TRAC' (MTRIA1 'ET' (MPOI1 'COUL' 'ROUG')) ;
  80 : 'FINS' ;
  81 : *                                                                     *
  82 : *-------------- Construction de la partition de Voronoi --------------*
  83 : *                                                                     *
  84 : * Taille caracteristique du nuage de points :                         *
  85 : X000 Y000 Z000 = 'COOR' MPOI1 ;
  86 : L000     = ('MAXI' ('PROG' ('MAXI' X000) ('MAXI' Y000) ('MAXI' Z000)))
  87 :   - ('MINI' ('PROG' ('MINI' X000) ('MINI' Y000) ('MAXI' Z000))) ;
  88 : 'OUBL' X000 ; 'OUBL' Y000 ; 'OUBL' Z000 ;
  89 : TOL1     = 1.E-9 * L000 ;
  90 : *                                                                     *
  91 : * Boucle sur les points de la partition :                             *
  92 : NBI1     = 'NBNO' MPOI1 ;
  93 : TPVORO1  = 'TABL' ;
  94 : TPVORO1 . 'MPT' = MPOI1 ;
  95 : 'REPE' BI1 NBI1 ;
  96 :   I1       = &BI1 ;
  97 :   PTI1     = MPOI1 'POIN' I1 ;
  98 :   TPVORO1 . PTI1 = 'TABL' ;
  99 :   MTI1     = MTRIA1 'ELEM' 'APPU' 'LARG' PTI1 ;
 100 :   MPTJ1    = (MTI1 'CHAN' 'POI1') 'DIFF' ('MANU' 'POI1' PTI1) ;
 101 :   TPVORO1 . PTI1 . 'MPT' = MPTJ1 ;
 102 :   NBJ1     = 'NBNO' MPTJ1 ;
 103 :   'REPE' BJ1 NBJ1 ;
 104 :     J1       = &BJ1 ;
 105 :     PTJ1     = MPTJ1 'POIN' J1 ;
 106 :     'SI' ('EXIS' TPVORO1 PTJ1) ;
 107 :       CNTIJ1   = TPVORO1 . PTJ1 . PTI1 . 'MAV' ;
 108 :       TPVORO1 . PTI1 . PTJ1 = 'TABL' ;
 109 :     'SINO' ;
 110 :       TPVORO1 . PTI1 . PTJ1 = 'TABL' ;
 111 :       MTIJ1    = MTI1 'ELEM' 'APPU' 'LARG' PTJ1 ;
 112 :       MPTK1    = ('CHAN' 'POI1' MTIJ1) 'DIFF' (PTI1 'ET' PTJ1) ;
 113 :       NBK1     = 'NBNO' MPTK1 ;
 114 : * Initialisation boucle PTK1 :                                        *
 115 :       PTK1     = MPTK1 'POIN' 1 ;
 116 :       TPVORO1 . PTI1 . PTJ1 . PTK1 = 'TABL' ;
 117 :       MTIJK1   = MTIJ1 'ELEM' 'APPU' 'LARG' PTK1 ;
 118 :       MPTL1    = ('CHAN' 'POI1' MTIJK1) 'DIFF'
 119 :         (PTI1 'ET' PTJ1 'ET' PTK1) ;
 120 :       PTL1     = MPTL1 'POIN' 1 ;
 121 :       PTIJ1    = PTJ1 'MOIN' PTI1 ;
 122 :       PTIK1    = PTK1 'MOIN' PTI1 ;
 123 :       PTIL1    = PTL1 'MOIN' PTI1 ;
 124 :       XIJKL1   = 'PMIX' PTIJ1 PTIK1 PTIL1 ;
 125 :       'SI' (XIJKL1 '<' 0.) ;
 126 :         PTL1     = MPTL1 'POIN' 2 ;
 127 :       'FINS' ;
 128 :       TPVORO1 . PTI1 . PTJ1 . PTK1 . 'PTL' = PTL1 ;
 129 :       EIJKL1  = MTIJK1 'ELEM' 'APPU' 'STRI'
 130 :         (PTI1 'ET' PTJ1 'ET' PTK1 'ET' PTL1) ;
 131 :       PVIJKL1 X1 = @CIRCONS EIJKL1 ;
 132 :       TPVORO1 . PTI1 . PTJ1 . PTK1 . PTL1 = PVIJKL1 ;
 133 :       'SI' ('NON' ('EXIS' TPVORO1 PVIJKL1)) ;
 134 :         TPVORO1 . PVIJKL1 = 'CHAN' 'POI1' EIJKL1 ;
 135 :       'FINS' ;
 136 :       PTKP1    = PTK1 ;
 137 :       PVIJKLP1 = PVIJKL1 ;
 138 : * Boucle sur PTK1 :                                                   *
 139 :       'REPE' BK1 NBK1 ;
 140 :         PTK1     = PTL1 ;
 141 :         TPVORO1 . PTI1 . PTJ1 . PTK1 = 'TABL' ;
 142 :         MTIJK1   = MTIJ1 'ELEM' 'APPU' 'LARG' PTK1 ;
 143 :         MPTL1    = ('CHAN' 'POI1' MTIJK1) 'DIFF'
 144 :           (PTI1 'ET' PTJ1 'ET' PTK1) ;
 145 :         PTL1     = (MPTL1 'DIFF' ('MANU' 'POI1' PTKP1)) 'POIN' 1 ;
 146 :         TPVORO1 . PTI1 . PTJ1 . PTK1 . 'PTL' = PTL1 ;
 147 :         EIJKL1  = MTIJK1 'ELEM' 'APPU' 'STRI'
 148 :           (PTI1 'ET' PTJ1 'ET' PTK1 'ET' PTL1) ;
 149 :         PVIJKL1 X1 = @CIRCONS EIJKL1 ;
 150 :         TPVORO1 . PTI1 . PTJ1 . PTK1 . PTL1 = PVIJKL1 ;
 151 :         'SI' ('NON' ('EXIS' TPVORO1 PVIJKL1)) ;
 152 :           TPVORO1 . PVIJKL1 = 'CHAN' 'POI1' EIJKL1 ;
 153 :         'FINS' ;
 154 :         AIJK1    = PVIJKLP1 'DROI' 1 PVIJKL1 ;
 155 :         TPVORO1 . PTI1 . PTJ1 . PTK1 . 'MAV' = AIJK1 ;
 156 :         'SI' (&BK1 'EGA' 1) ;
 157 :           CNTIJ1   = AIJK1 ;
 158 :         'SINO' ;
 159 :           CNTIJ1  = CNTIJ1 'ET' AIJK1 ;
 160 :         'FINS' ;
 161 :         PTKP1    = PTK1 ;
 162 :         PVIJKLP1 = PVIJKL1 ;
 163 :       'FIN' BK1 ;
 164 :     'FINS' ;
 165 :     TPVORO1 . PTI1 . PTJ1 . 'MAV' = CNTIJ1 ;
 166 :     'SI' (J1 'EGA' 1) ;
 167 :       TPVORO1 . PTI1 . 'MAV' = CNTIJ1 ;
 168 :     'SINO' ;
 169 :       TPVORO1 . PTI1 . 'MAV' = (TPVORO1 . PTI1 . 'MAV') 'ET' CNTIJ1 ;
 170 :     'FINS' ;
 171 :   'FIN' BJ1 ;
 172 :   'SI' (I1 'EGA' 1) ;
 173 :     TPVORO1 . 'MAV' = TPVORO1 . PTI1 . 'MAV' ;
 174 :   'SINO' ;
 175 :     TPVORO1 . 'MAV' = (TPVORO1 . 'MAV') 'ET' (TPVORO1 . PTI1 . 'MAV') ;
 176 :   'FINS' ;
 177 : 'FIN' BI1 ;
 178 : *                                                                     *
 179 : *------------------ Elimination des points doubles -------------------*
 180 : *                                                                     *
 181 : 'ELIM' (TPVORO1 . 'MAV') TOL1 ;
 182 : *                                                                     *
 183 : 'SI' IVISU1 ;
 184 :   'TRAC' (((TPVORO1 . 'MAV') 'COUL' 'ROUG') 'ET' MPOI1) ;
 185 : 'FINS' ;
 186 : *                                                                     *
 187 : *------------------------------ Sortie -------------------------------*
 188 : *                                                                     *
 189 : 'RESP' TPVORO1 ;
 190 : *                                                                     *
 191 : 'FINP' ;
 192 : *---------------------------------------------------------------------*
 193 : * FIN PROCEDURE @P_VORO                                               *
 194 :  

© Cast3M 2003 - All rights reserved.
Disclaimer