Travaux Pratiques Modélisation Géométrique
Courbes cubiques d'Hermite et repère de Frénet
-
Le but de ce TP est de se familiariser avec les courbes paramétriques ainsi que le repère de Frénet.
A partir d'une scène représentant un petit musée avec un robot, il va falloir, dans un premier temps, faire déplacer le robot le long d'une courbe cubique d'Hermite.
De manière à conserver une orientation cohérente du robot au cours de son déplacement, il faudra ensuite le positionner dans le repère de Frénet de la courbe. Pour finir, il faudra traiter les problèmes de "flip" du repère de Frénet si la courbe a un ou des points d'inflexion.
Il est fortement recommandé de se munir de son cours pour effectuer ces TPs.
-
L'évaluation des TPs se fera à partir :
-
D'une scéance de validation qui aura lieu après les 5 scéances de TPs. L'étudiant montrera les résultats qu'il est arrivé à obtenir au terme des scéances de TP.
-
D'un compte rendu de TPs qui sera remis à l'enseignant en version imprimée ou manuscrite lors de la validation. Ce compte rendu comprendra les réponses aux questions posées dans les sujets des différents TPs, ainsi qu'un récapitulatif mettant en évidence le travail effectué par l'étudiant.
-
Avant de pouvoir commencer votre TP, il vous faut installer la structure de programme de départ. Suivez les instructions suivantes :
-
Créez un répertoire qui sera votre répertoire de travail pour les TPs de modélisation et de rendu.
-
Téléchargez dans ce répertoire le fichier suivant:
http://www.irit.fr/~Loic.Barthe/Enseignements/BE_Modelisation/Robo/BE_SIM1_05_Base.tar.bz2
-
Une fois l'archive téléchargée, vous pouvez la décompresser : bouton droit de la souris sur le nom du fichier et selectionner "extract here". Vous pouvez alors effacer l'archive.
-
Pour faire la première compilation, tapez tout d'abord la commande "qmake", puis la commande "make". Par la suite, il suffira d'utiliser la commande "make" pour compiler votre programme.
-
Pour lancer l'executable, utilisez la commande : "./robo"
-
Enfin, vous pouvez créer la documentation avec la commande "cd doc ; doxygen ; cd ..". Elle sera alors accessible avec la commande "konqueror doc/html/index.html&"
Sinon, la documentation complète sur l'organisation des classes C++ est accessible à la page suivante :
http://www.irit.fr/~Loic.Barthe/Enseignements/BE_Modelisation/Robo/Doc/index.html
-
Dans premier temps, en vous aidant de la documentation, faites un diagramme de classes de manière à bien visualiser l'organisation des différentes classes. Donnez aussi un bref descriptif de chaque classe (pas les méthodes, mais ses fonctionnalités).
-
Votre travail va maintenant consister à compléter le code de certaines méthodes de la classe Hermite : l'interface complète est donnée dans le fichier "Hermite.h" et le corps des méthodes à compléter est dans le fichier "Hermite.cpp".
-
Tout d'abord, intéressons-nous à la position et l'orientation du robot, sans gestion du "flip". Pour effectuer cet exercice, vous aurez besoin des informations suivantes (au cours du TP, vous serez aussi amené à répondre aux questions qui vous sont posées) :
-
Une cubique d'hermite (contrôlée par les points P0, P1 et les tangentes P0u, P1u) est calculée à partir de sa représentation matricielle :
p(u) = UMP = [ u³ u² u 1 ] | 2 -2 1 1 | | p0x pOy p0z 1 |
|-3 3 -2 -1 | | p1x p1y p1z 1 |
| 0 0 1 0 | | p0ux p0uy p0uz 0 |
| 1 0 0 0 | | p1ux p1uy p1uz 0 |
Le résultat de ce calcul est donc un vecteur à 4 composantes dont seules les 3 premières composantes sont récupérées gràce à une fonction adaptée de la classe Vector4. Expliquez pourquoi seules les 3 premières composantes sont conservées.
-
Deux objets "cubique d'Hermite" sont déjà créés dans la méthode "createScene" de la classe BeSynthese : une pour le robot et une pour le spot.
Vérifier que le tracer de ces deux courbes est correct.
-
Nous souhaitons faire déplacer automatiquement le robot le long de la courbe appelée "RoboCurve" en orientant l'objet grâce au repère de Frénet associé à la courbe.
Le positionnement et l'orientation du robot via le repère de Frénet se fait par l'intermédiaire d'une matrice de transformation 4 × 4. Donnez le contenu de cette matrice. Pour répondre à la question suivante, il faut savoir que le robot est à l'origine centré sur l'axe vertical (Oy), les roues posées sur le plan (Oxz) (le centre du robot est à une altitude de y=0.5), et il regarde les z positifs. Justifiez l'ordre dans lequel les vecteurs (T,N,B) du repère de Frénet sont placés dans cette matrice de transformation.
Expliquez aussi pourquoi l'objet "cubique d'Hermite" créé dans la méthode "createScene" de la classe BeSynthese est à une hauteur y=0.5.
-
Après avoir codé les fonctions Hermite::computeFrenet, implantez la méthode d'animation BeSynthese::doAnimation.
Notez que le positionnement d'un objet se fait par via un objet de type Transform et la méthode Entity::setTransform. Cependant, la convertion entre une matrice 4 × 4 et un "Transform" est automatique. Notez également la méthode Scene::getByName qui permet d'obtenir n'importe quel objet (même les lumières) dans la scène à partir de son nom.
-
Maintenant que le robot suit la cubique d'Hermite, ajoutez la gestion du "flip". Vous aurez besoin de vous servir de l'attribut hOldN de la classe Hermite. Cet attribut permet de mémoriser un vecteur normale principale. Expliquez pourquoi cet attribut est initialisé à (-1.,0.,0.) par l'intermédiaire de la méthode initCheckFlip(...) lors de la création de l'objet "cubique d'Hermite" dans le constructeur de la classe Viewer.
-
Pour celles et ceux qui ont le temps, implanter la méthode BeSynthese::resetAnimation et animer la source lumineuse "Spot" selon la courbe "SpotCurve" de la même façon que pour le robot (dans les deux cas il s'agit principalement de copier/coller !). Notez que le spot est dirrigé, comme le robot, selon l'axe des z.
Fin des TPs 1 et 2