Télécharger @p_voro.procedur

Retour à la liste

Numérotation des lignes :

  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 - Tous droits réservés.
Mentions légales