TD 6 : courbes de subdivision
Résumé du TD
Nous reprenons le TD sur les courbes, pour nous intéresser aux courbes de subdivision.
Instructions
Repartez du programme créé pour le TD 2 (mais recopiez-le dans un autre dossier). Il contient déjà une fonction pour entrer des points par la souris (stockés dans le tableau controlPoints).
Implémentation des Courbes de subdivision
Les courbes de subdivision sont plus difficiles à implémenter que les courbes de Bézier ou les B-splines, parce qu'elles n'ont pas d'équation précise. Elles sont définies par raffinement successifs : à chaque étape, on remplace les n points par 2n-1 nouveaux points, et on arrête la subdivision quand la courbe est suffisamment lisse.
Dans le cadre du TD, comme il n'est pas facile de décider l'arrêt de la subdivision, je vous suggère de faire simplement 4 étapes de raffinement:
- on définit deux tableaux très grands, genre newPoints[200][2]
- lors d'une étape de raffinement, on crée les points dans l'un des tableaux à partir des points de l'autre tableau.
- une variable auxiliaire, numPoints nous dit combien de points sont utilisés dans le tableau.
- on répète l'opération 4 fois (par exemple), ce qui nous donne 2^4 fois le nombre de points initial comme nombre de points total.
- Au final, on affiche tous les points (sous forme de lignes brisées, comme pour les B-splines).
Schéma de subdivision
Vous pouvez implémenter n'importe quel schéma de subdivision vu en cours. Celui-ci est assez efficace et intéressant :
- on garde les points calculés à l'étape précédente (qui font tous les points de rang pair, 2i)
- les nouveaux points (2i+1) sont définis par :
- les points en dehors du tableau (indice négatif, par exemple) sont pris comme égal au dernier point du tableau.
(c'est le même schéma de subdivision que proposé pour le TD2, mais réorganisé).
Variations du schéma de subdivision
En fait, ce schéma de subdivision est paramétrable. On peut aussi l'exprimer comme :Reprenez le code réalisé, et remplacéez 1/8 par une variable alpha, que vous pouvez ajuster avec les touches du clavier.
- Pour alpha = 0, on doit avoir uniquement la ligne joignant les points de contrôle.
- Pour alpha = 1/8 (=0,125) on a la courbe de subdivision, lisse.
- Passé une certaine valeur limite (laquelle ?), on obtient une courbe fractale.