Algorithmes du Marching Square et Marching Cube

De Physix.

Les algorithmes du Marching Square et Cube permettent de représenter une isovaleur d'une potentiel (un contour pour le Marching Square et une surface pour le Marching Cube).

Nous allons expliquer le fonctionnement du Marching Square, la généralisation en 3D pour le Marching Cube est facile. Nous verrons les résultats sur le Marching Cube.

Explication du Marching Square

Nous cherchons à approcher un contour par un ensemble de segments. Le contour est défini par un isopotentiel.

Pour l'exemple C = \left\lbrace \left( x,y\right)\in\left[ 0,1\right] ^{2} : x^{2}+y^{2}=1 \right\rbrace.

C'est donc le quart de cercle unité. Considérons tout d'abord le carré \left[ 0,1\right]^{2}. Découpons-le en quatre carrés (les milieux des segments). Et ainsi de suite à partir de chaque carré on construit 4 autres plus petits carrés. On s'arrête un moment. Plus on voudra être précis, plus il faudra découper, mais hélàs plus on aura beaucoup de carrés (temps d'exécution plus lent).

Algorithmes du Marching Square et Marching Cube - MS1.JPG Le carré initial

Algorithmes du Marching Square et Marching Cube - MS2.JPG Première découpe

Algorithmes du Marching Square et Marching Cube - MS3.JPG Deuxième découpe

Maintenant on va construire nos segments comme ceci : on joint les milieux des segments dont les extrémités sont de part et d'autre de l'isopotentiel.

Algorithmes du Marching Square et Marching Cube - MSS1.jpg Le carré initial

Algorithmes du Marching Square et Marching Cube - MSS2.jpg Première découpe

Algorithmes du Marching Square et Marching Cube - MSS3.jpg Deuxième découpe

Algorithmes du Marching Square et Marching Cube - MSS4.jpg Troisième découpe

Cependant nous allons améliorer un peu cet algorithme, l'idée est qu'au lieu de prendre le milieu on peut prendre les points d'intersection (Une simple dichotomie en plus). L'ensemble des carrés forment une grille, on lie les points d'intersection entre la grille et le contour. On voit très bien que plus on divise nos carrés plus on se rapporche du contour. Ceci nous permet d'être plus précis pour un niveau de récursion plus faible. Cela va accélérer l'algorithme.

Algorithmes du Marching Square et Marching Cube - MSC1.JPG Le carré initial

Algorithmes du Marching Square et Marching Cube - MSC2.JPG Première découpe

Algorithmes du Marching Square et Marching Cube - MSC3.JPG Deuxième découpe

N.B.: Pour calculer les points d'intersection, on fait une dichotomie le long de chaque coté des carrés. Ceci nous impose que sur l'isopotentiel, le potentiel doit changer de signe (pour les potentiels différentiables, il faut que le gradient soit non-nul aux points où le potentiel vaut notre isovaleur).


Vous trouverez sur internet bons nombres de sites internet expliquant qu'il y a 16 cas différents à traiter dans les algorithmes de Marching Square et Marching Cube. Il y a une autre façon de traiter cela : on découpe le carré en triangles et le cube en tétrahèdres ensuite pour le cas de l'intersection d'une ligne ou d'une surface d'isopotentiel avec un triangle ou un tétrahèdre est beaucoup plus simple puisqu'il y a moins de cas.

Résultats du Marching Cube

Voilà les résultats de l'algorithme du Marching Cube sur un potentiel d'une ellipse.

Comme pour le Marching Square, nous découpons chaque cube en 8 petits cubes :

Organisation du code orbitale - Cube8.JPG

A gauche l'algorithme standard du Marching Cube. A droite l'algorithme du Marching Cube avec notre petite amélioration de la dichotomie.

Algorithmes du Marching Square et Marching Cube - ExMarching(1,1,0).jpg Algorithmes du Marching Square et Marching Cube - ExMarching(1,1,10).jpg découpe #1

Algorithmes du Marching Square et Marching Cube - ExMarching(2,2,0).jpg Algorithmes du Marching Square et Marching Cube - ExMarching(2,2,10).jpg découpe #2

Algorithmes du Marching Square et Marching Cube - ExMarching(3,3,0).jpg Algorithmes du Marching Square et Marching Cube - ExMarching(3,3,10).jpg découpe #3

Algorithmes du Marching Square et Marching Cube - ExMarching(4,4,0).jpg Algorithmes du Marching Square et Marching Cube - ExMarching(4,4,10).jpg découpe #4

Algorithmes du Marching Square et Marching Cube - ExMarching(5,5,0).jpg Algorithmes du Marching Square et Marching Cube - ExMarching(5,5,10).jpg découpe #5

Algorithmes du Marching Square et Marching Cube - ExMarching(6,6,0).jpg Algorithmes du Marching Square et Marching Cube - ExMarching(6,6,10).jpg découpe #6


On voit immédiatement le gain de notre petite astuce.

Nous avons dit plus haut que pour des raisons de simplicité nous avons découpé chaque cube en tétrahèdres pour enfin calculer facilement les triangles approchant la surface.

Organisation du code orbitale - Tetraedron5.JPG Le gros cube => 5 tétrahèdres

Anglais Chinois
L'article que vous demandez n'existe pas en Chinois.
Outils personnels