Infographie 2D - Projet

mer. 16 septembre 2009

Construction d'objets géométriques simples

L'objectif de ce projet est de développer une petite application de construction et de visualisation d'images 2D à partir des notions vues en cours/TD et des modules écrits en TP.

Evaluation : il est impératif que vous suiviez à la lettre les consignes qui suivent. Ce projet doit être constitué de modules, comportant chacun le fichier des en-têtes, le(s) fichier(s) source(s) ainsi qu'un fichier de tests. Chaque fichier doit avoir un nom éloquent, et contenir le nom de son auteur. Le fichier des en-têtes comportera toute explication permettant de comprendre la fonction et la structure du module, il tiendra donc lieu de documentation du module. Par ailleurs, le fichier principal contiendra toutes les informations nécessaires à l'utilisation du programme final. Un "makefile" accompagnera le tout, indépendant de l'organisation des répertoires de son auteur. Les droits des fichiers seront choisis de tel sorte que les correcteurs puissent prendre connaissance de leur contenu. L'ensemble des fichiers sources, sans l'exécutable, sera rassemblé dans une archive de type "tar file". La non observation de ces consignes simples sera systématiquement sanctionnée par des malus cumulatifs appliqués à la note finale. La notation de ce projet prendra aussi en compte : le respect du cahier des charges, l'efficacité des fonctions graphiques, ainsi que la robustesse, la lisibilité et la modularité de votre code.


Au démarrage de l'application, l'utilisateur doit pouvoir choisir :
  • la position et les dimensions de la partition du plan euclidien,
  • la taille de la fenêtre principale ou fenêtre graphique,
  • la position et les dimensions d'une "sous-fenêtre" ou fenêtre de visualisation (représentée par un rectangle blanc) inscrite dans la fenêtre graphique,
  • la couleur initiale sous la forme d'un triplet (R, V, B) dont les valeurs sont comprises entre 0 et 255.

Liste des outils à implanter :
  • choix d'une couleur,
  • tracé de segments avec l'algorithme de Bresenham, les deux sommets étant définis soit dans l'espace euclidien (l'espace "réel") soit directement par l'intermédiaire de la souris dans l'espace écran ; dans le premier cas, il faut effectuer le clipping du segment par l'algorithme de Cohen-Sutherland vu en cours,
  • tracé de polygones quelconques, le polygone pouvant être défini dans l'un des deux espaces,
  • tracé de courbes de Bézier soit avec la méthode des polynômes de Bernstein, soit avec la méthode itérative, les points de contrôle qui déterminent la courbe étant nécessairement défini par des clics de souris,
  • Remplissage d'un polygone quelconque en utilisant l'algorithme "scan-line" (remplissage géométrique).
Pour les plus courageux :
  • gestion des erreurs (couleur inconnue, points cliqués en dehors de la fenêtre de visualisation, ...),
  • modification d'une courbe de Bezier par déplacement de ses points de contrôle,
  • antialiasing du tracé de segments de droite