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