TD 1 - Surfaces de subdivision

TriangulationDS_2

Maintenant on va se familiariser avec une autre structure de données pour les maillages. En particulier, le but de cette partie est de vous illustrer le fonctionnement de la classe TriangulationDS_2, permettant de représenter des triangulations planaires et des maillages surfaciques 3D triangulés. Du point de vue combinatoire, on a vu en amphi qu'une surface combinatoire de genre 0 correspond à un graphe planaire: c'est aussi pour cette raison que la classe TriangulationDS_2 est une classe générique, parametrée par le type de point qu'on veut associer au sommet du maillage.
Ainsi, si on veut représenter un maillage 3D surfacique on aura:
TriangulationDS_2<Point_3>
Alors que si on veut coder une triangulation planaire, on écrira:
TriangulationDS_2<Point_2>

Schema de subdivision: Loop subdivision

Ici on vous demande d'implanter le schéma de subdivion connu sous le nom de "Loop subdivision".
Vous pouvez trouver plus de détails concernant la description du schéma de subdivision, ainsi qu'un esquisse de la solution ici.

Important: avant de commencer, vous devez télécharger le squelette LoopSubdivision.java d'un programme java contenant un certain nombre de fonctions dont vous aurez besoin, pour lire des données, ainsi que pour manipuler/créer un maillage triangulaire. Vous y trouverez aussi des fonctions pour tester le résultat.

Il ne vous reste qu'à compléter le squelette ci-dessus, étape par étape, en tenant compte des suggestions fournies par les transparents.

Important: le maillage d'origine ne doit pas etre modifié. Le résultat de votre programme doit etre un nouveau maillage (aucune information n'est partagée avec l'ancien)

Ce qui vous est demandé

But: écrire un programme qui permet de subdiviser une triangulation donnée.
Entrée du programme: un maillage triangulé sans bord (de genre arbitraire), codé sous forme de fichier OFF.
Sortie du programme: un maillage triangulé, codé sous forme de TriangulationDS_2. Pour gagner du temps et de l'énérgie, on pourra se servir des fonctions déjà fournies par la librairie Jcg.
Notamment, il est possible de construire une TriangulationDS_2 à partir de la suite des points (géométriques), ainsi que des relations d'incidence faces/sommets.