Visualisation - TD1 : Marching Square



Home Research Publications Teaching Personal

Introduction

Vous allez devoir, dans ce premier TD, programmer une méthode de Marching Square. Vous pouvez programmer dans le language qui vous plaira: C/C++, Java, Matlab, .... Votre programme devra créer des images que vous pourrez exporter de type .ps, ou .eps.

Marching Square, c'est quoi?

Nous devons tout d'abord partir d'une grille, dont chaque intersection possède une valeur. Ensuite, nous allons comparer avec une iso-valeur chaque valeur de la grille, et lui attribuez un + ou un - suivant les cas.

En tout, il existe, pour chaque carré, 2 cas par sommet, soit 16 cas en tout. Les 16 cas peuvent se regrouper en 4 cas possible:

  • Le plus simple (2 cas/16): Que des + ou que des -. Dans ce cas, rien ne se passe.

  • Le second cas (8 cas/16): Un seul + ou un seul -. Dans ce cas, nous cherchons sur les arêtes adjacentes une interpolation du point, et nous tracons le segment correspondant.

  • Le troisième cas (4 cas/16): 2 + et 2 - adjacents. De même que précedemment, nous recherchons les points sur les arêtes opposées, et nous tracons le segment correspondant.

  • Le dernier cas (2 cas/16): 2 + et 2 - en diagonal. Attention, ce cas est plus difficile. Cette fois, nous cherchons les points interpoler sur les 4 arêtes, et nous tracons deux segments. Pour savoir quels segments nous tracons, nous nous référerons à une valeur centrale, correspondant au quart de la somme des 4 autres.

  • Taches à réaliser

    Créez les différentes fonctions nécessaires pour appliquer cette méthode. En particulier, il doit être facile de pouvoir changer la taille de la grille (n x m), de choisir les valeurs aux points d'intersections, et de changer l'iso-valeur.

    Remarques

  • Calcul des points interpolants: Soient p1, p2, les points extrèmes sur l'arête, v1 et v2, leurs valeurs respectives, et v l'iso-valeurs. Nous cherchons t tel que v = t v1 + (1-t) v2.
    Ainsi t = (v-v2)/(v1-v2). Le point interpolant sur l'arête sera p = t p1 + (1-t) p2.