TP Animation – Interpolations S.Gibet - T.Le Naour Année 2011-2012

publicité
TP Animation – Interpolations
S.Gibet - T.Le Naour
Année 2011-2012
Ce TP va vous permettre de mettre en pratique la notion d’interpolation vue en cours.
Deux types de schéma d’interpolation vont être abordés dans ce TP : interpolation linéaire et
l’interpolation par splines cubiques.
1
Interpolation linéaire
Une interpolation linéaire permet de définir de manière implicite le passage d’une configuration
(par exemple une position) à une autre selon une base affine. Dans sa forme paramétrique
(l’interpolation est paramétrée par une valeur t ∈ [0 · · · 1]), l’interpolation entre deux points P1
et P2 ∈ R3 est donnée par :
P(t) = (1 − t)P1 + tP2
(1)
Interpolation entre 2 points Prenez la structure de programme donné pendant la séance de
TP. Implémentez une classe CInterLinear qui dispose comme données membres de 2 points
(structure de données que vous aurez implémentée au préalable). Vous implémenterez les méthodes suivantes :
• draw() qui dessine la trajectoire en vert et les deux extrémités en rouge,
• compute(...) qui prend une valeur double t en paramètre et renvoie un point de R3
Utilisez cette classe pour réaliser une animation d’un cube se déplaçant le long de votre
trajectoire1 .
Trajectoire d’interpolation Définissez cette fois-ci une classe CTrajInterLinear héritant de la classe Interpolator qui peut contenir plusieurs points associés à la trajectoire
d’interpolation. Associez à cette classe une méthode addPoint(...) qui permet d’ajouter un
point à la trajectoire. Tout comme la question précédente, implémentez une méthode draw() et
une méthode compute(...) qui renvoie un point de la trajectoire selon le paramètre t passé en
paramètre (Attention ! lorsque t varie de 0 à 1, toute la trajectoire est parcourue !).
Testez votre classe pour un nombre de points > 4. Observez les discontinuités de vitesse sur
les différents segments de la trajectoire.
Proposez une méthode permettant d’avoir une vitesse constante le long de la trajectoire.
2
Interpolation par splines de Bézier
On s’intéresse cette fois-ci à l’interpolation le long de trajectoire courbe. Pour celà on utilise les
splines de Bézier.
1
Utilisez la méthode DrawCube() pour dessiner le cube.
1
Définition des splines de Bézier à l’ordre 3 ou cubique Une spline de Bézier cubique
est donnée par la relation :
P(t) = (1 − t)3 P1 + 3t(1 − t)2 P2 + 3t2 (1 − t)P3 + t3 P4
(2)
avec t ∈ [0 · · · 1] et P1 , P2 , P3 , P4 les points de contrôle de la courbe.
Evaluation de la spline par l’algorithme de De Casteljau L’algorihtme de De Casteljau
permet de calculer rapidement les points de la courbe de Bézier via une procédure récursive
qui utilise la division par deux et les opérations de base en évitant toutes les opérations de
l’arithmétique des nombres réels flottants (cf. cours). Ecrivez une classe CInterpolBézier
selon un schéma identique aux précédentes questions. Implémentez dans la méthode draw() un
critère qui vous permettra de stopper la récurrence dans l’algorithme de De Casteljau.
Courbe spline Ecrivez une classe CCourbeBézier qui admet un nombre indéfini de points
de contrôle en utilisant la version généralisée de l’algorithme de De Casteljau. Testez.
Téléchargement