Visualisation de courbes 3d
Tuteur : Philippe Blayo Mel:
blayo@univ-mlv.fr
Langage de programmation : C++ et TK ou X11/Motif (eventuellement Java)
Environnement de développement :
UNIX, LinuX
Cotation de difficulté : normal à difficile
Résumé du projet :
Ce projet a pour but la visualisation de courbes 2d ou 3d definies au format gnuplot.
Le sujet du projet
Il s'agit d'afficher des courbes et de modifier le point de vue pour examiner ces courbes sous
differents angles : zoomer, tourner autour d'un axe, realiser une translation ...
Format d'entree
  Une courbe sera representee par une suite de segments de
droites. Dans le format gnuplot, un fichier contenant une telle courbe sera de la forme suivante :
    # premier segment de droite
    <x11> <y11> <z11>
    <x12> <y12> <z12>
    <x12> <y12> <z12>
   
    # deuxieme segment de droite
    <x21> <y21> <z21>
    <x22> <y22> <z22>
   
    ...
   
    # nieme segment de droite
    <xn1> <yn1> <zn1>
    <xn2> <yn2> <zn2>
  Chaque segment est separe du suivant par une ligne vide.
Un fichier peut contenir plusieurs courbes. Dans ce cas, chaque courbe est separee de
la suivante par une ligne vide de plus.
Exemple
Un exemple de courbe :
|
Le fichier permettant de l'obtenir :
    0 0 1
    1 1 1
    4 0 1
    1 -1 1
    0 0 1
   
   
    0 0 1
    1 -0.5 3
    3 0 1
    0 0 1
   
   
    0 0 1
    1 0.5 3
    3 0 1
    0 0 1
|
Choix du langage
Le projet devra etre realise en C++. L'interface pourra etre programmee soit en Tk soit
en X11/Motif (eventuellement meme tout pourrait etre realise en Java).
  Au cours d'une premiere etape, il serait souhaitable de realiser des tests
comparatifs pour determiner entre Tk et Motif (ou Java) lequel est le plus adapte aux contraintes
de performances necessaires a ce projet. Il est probable que les resultats seront meilleurs avec
Motif (pour Java il faudrait tester different JIT). Mais si la difference est faible,
Tk sera prefere pour sa portabilite.
Ces test pourraient etre constitues d'affichages successifs de droites dans une fenetre
pour evaluer la vitesse de rafraichissement qui sera determinante pour la fluidite des changements
d'angle de vue.
Affichage
Le programme devra afficher les courbes definies dans un ou plusieurs fichiers.
Une option interessante est de supprimer les parties cachees :
Dans tous les cas, il s'agit de realiser une projection en perspective des points des courbes sur l'ecran.
Des documents seront fournis expliquant comment utiliser le theoreme de Thales pour le faire.
Mouvements
L'ecran representera l'objectif d'une camera.
Les operations suivantes devront permettrent de modifier le point de vue en deplacant cette
camera :
- zoom,
- rotation,
- translation
Il serait egalement interessant de pouvoir realiser des operations sur les courbes
elles-meme :
- translations de courbes
- selection et mise en valeur d'une ou plusieurs coubes parmi celles specifiees
Le but est de faire en sorte que ces opérations soient aussi rapides que possible.
A cette fin, toute technique d'optimisation pourra etre utilisee, principalement :
- l'optimisation des parties du code determinantes pour la vitesse d'execution de ces
operations. L'utilisation d'un profiler permettra de caracteriser ces parties. Il s'agit
d'une part de minimiser le nombre d'operations realisees (test et affectations) et d'autre
part d'utiliser au mieux les memoires caches d'instruction et de donnees. Pour cela,
utiliser la :
- une donnee ou une instruction utilisee recemment ne necessitera pas d'acces en memoire
centrale (localité temporelle)
- une donnee ou une instruction dont l'adresse est proche d'une autre deja utilisee ne necessitera pas d'acces en memoire
centrale (localité spaciale)
- la reduction de la complexite des algorithmes employes
Il serait interessant de pouvoir evaluer le gain de chaque optimisation realisee
par des tests specifiques.
  Les resultats de tous les tests devront figurer dans le rapport.
Difficultés
La difficulte normale du projet correspond a un affichage statique des courbes sur l'ecran
(sans aucun mouvement de camera possible). Dans ce cas, il faudrait pouvoir surligner
certaines courbes ou certaines parties de courbes. Il serait egalement plus facile d'eliminer les
parties cachees.
Le projet devient difficile si des mouvements relativement fluides sont executes.
Les difficultées à se situent alors a plusieurs niveaux :
- L'interfacage entre le C++ et Tk ou Motif
- L'optimisation du code
- L'algorithmique géométrique (surtout pour eliminer les parties cachees)
Retour
à la liste des projets.