L'algorithme naïf de construction de cette association, consisterait en une double boucle
dont la compléxité serait en
, avec
le nombre d'atomes présents dans
le recouvrement et
le nombre d'élément présent dans le recouvrement. Dans le cas tri-dimentionel
le problème atteint des proportions non négligeable3.1, et il faut à tout prix réduire la compléxité de cet
algorithme.
Afin d'obetenir cette accélération, il faudrait faire un présélection sur critère spatial.
La solution choisie porte sur la construction d'une grille, partition de l'espace,
qui permet d'obtenir en temps constant une liste d'éléments d'un maillage qui intersectent
l'élement de la grille qui contient une coordonnée de l'espace donnée. On définit cette grille par :
![]() |
On fournit par la figure 3.6 un exemple de grille 2D et 3D. Le remplissage de cette grille peut se faire lors du parcours de sélection (et de pondération) des éléments.
La taille de la grille sera telle que la longueur maximum des triangles sera strictement plus petite que la
taille des éléments de la grille. Cela évitera bien sûr la duplication trop importante des éléments du maillage
à répertorier, mais également les cas de détection à problèmes. Par exemple, le cas ou un triangle contiendrait
plusieurs éléments de la grille ne permet pas (sauf à utilisation d'un algorithme plus couteux) la dectection
de ces dernière. Dans ce cas des éléments de la grille ne répertorieraient pas ce triangle, ce qui serait enlève
tout interêt quant à l'utilisation de cette grille. La figure 3.7 illustre ce cas de figure.
![]() |
Néanmoins même quand ce dernier critère de taille se voit respecté, il faut distinguer les cas où tous les sommets d'un élement du maillage se trouve dans le même block de la grille, et les autres cas. Dans le premier cas, on enregistre l'élément concerné uniquement dans le seul bloc de la grille qui le contient. Dans les autres cas, la démarche la moins couteuse fut celle de construire une boite englobante de cet élément et d'enregistrer tous les sommet de cette dernière. la figure illustre ce deuxième cas de figure.
![]() |
Afin de construire l'association dont il est question,
on parcours l'ensemble des atomes. Pour chaqun d'entre eux, on demande à la grille la liste des
éléments dont l'intersection avec le bloc que l'atome concerné est non vide.
En pratique, le réglage de la finesse de la grille permet d'accélérer la boucle, tant que l'on reste dans
le critère de taille précisé plus haut.
La compléxité
de l'algorithme de construction de cette association devient par conséquent
avec m le
nombre d'atomes présents dans le recouvrement.
tougui 2005-09-08