École de technologie supérieure Génie de la production automatisée GPA665 Structures de données et algorithmes Laboratoire 3 Animation d’un arbre Responsable du cours : Rédaction du laboratoire : Révision et barème de correction : Temps alloué pour ce laboratoire : Mohamed Cheriet, ing., Ph. D. Jean-Christophe Demers Yan Levasseur & Mathieu Binette 4 périodes de laboratoire Résumé Les animations graphiques d’une certaine complexité se doivent d’être gérées par un système qui en automatise la réalisation. Ce laboratoire permet, avec l’aide du laboratoire 2 (Génération d’une animation graphique par un script), de créer une animation représentant un arbre qui est soumis à l’effet du vent. Ce laboratoire offre à l’étudiant de concevoir lui-même la structure de données qu’il désire utiliser (à quelques contraintes près). Dans un premier temps, ce laboratoire vous donnera l’occasion d’analyser un problème concret et ensuite de concevoir et développer les services associés au Type de Données Abstrait arbre. De plus, comme à chacun des laboratoires, il est nécessaire d’adopter une méthode de programmation rigoureuse afin d’atteindre les objectifs fondamentaux de qualité logicielle. Énoncé du problème Les techniques actuelles d’infographie permettent de créer des images de synthèse incroyablement réalistes. Cependant, on remarque qu’il devient très difficile de garder le même niveau de réalisme pour les images présentant des phénomènes associés aux géométries fractales ou les images sur lesquelles on retrouve un nombre incalculable de composants (par exemple un carré de sable, des cheveux, des arbres ou même un brocoli!). Ce troisième laboratoire vous demandera d’animer graphiquement le squelette d’un arbre qui est soumit à de forts vents. Évidemment, ce n’est pas les concepts d’infographies qui sont à étudier mais plutôt les structures de données qui peuvent être utilisées pour ce type d’animation. Définition de la tâche Vous devez créer un petit programme qui s’exécute en mode console (fenêtre texte) et qui crée un fichier de type *.SFA (voir le laboratoire 2 pour la description du format de fichier) dans lequel on retrouve une animation d’un arbre soumit à de forts vents. Votre programme doit respecter les critères associés à l’arbre et à l’animation qui sont décrits dans les deux sections suivantes. De plus, votre programme doit demander à l’usager la valeur des paramètres qu’il désire avoir pour l’arbre et l’animation. Critères sur l’arbre aire L’arbre que vous générez doit être de type n dont le niveau maximum est déterminé par deux critères : soit le nombre de niveaux (déterminé par l’usager) ou la longueur d’un segment (lorsque la longueur d’une branche est inférieure ou égale à 3). Un nombre aléatoire déterminera le nombre de branches enfants pour chaque branche parent. Ce nombre doit tout de même être borné à un minimum de 2 et à une valeur maximum définit par l’usager. La dispersion de chaque groupe de n branches pour chaque nouveaux noeuds doit être symétrique. C'est-à-dire que les branches de chaque noeuds doivent être distantes d’une valeur égale. Voici quelques exemples d’arbres valides : GPA665 LABORATOIRE 3 STRUCTURES DE DONNEES ET ALGORITHMES ÉTE 2004 2/7 Niveau maximum : 5 Nombre de branches : 2 – 7 Longueur d’une branche par rapport à un parent : 0.75 Niveau maximum : 6 Nombre de branches : 2 – 3 Longueur d’une branche par rapport à un parent : 0.75 Niveau maximum : 5 Nombre de branches : 2 – 5 Longueur d’une branche par rapport à un parent : 0.75 GPA665 LABORATOIRE 3 STRUCTURES DE DONNEES ET ALGORITHMES ÉTE 2004 3/7 Niveau maximum : 4 Nombre de branches : 2 – 12 Longueur d’une branche par rapport à un parent : 0.9 Critères sur l’animation L’animation que vous générez est une pseudo-simulation d’une déformation d’un arbre soumit à un vent dont l’amplitude varie dans le temps. Pour chaque séquence d’animation, on retrouve l’arbre qui est déformé selon sa position dans le temps. L’amplitude de la déformation est directement proportionnelle à l’amplitude du vent et au niveau de l’arbre. Par exemple, le tronc qui se trouve à la base de l’arbre ne varie presque pas en comparaison aux dernières branches qui elles, varient considérablement. Ce qui veut dire que les branches situées à l’extrémité de l’arbre sont plus petites, donc plus facile à être déformés par les vents. De plus, le point d’attache de chacune des branches est toujours relative à la branche parent (tout en considérant les déformations de cette dernière). On simplifie le travail en considérant que le vent est toujours horizontal mais qu’il peut varier en amplitude et en direction. Ainsi, pour la déformation de l’arbre, vous devez aussi considérer la direction du vent en fonction de l’orientation de chacune des branches. Ce qui veut dire q’une branche orientée verticalement variera énormément et qu’une branche orientée horizontalement ne variera aucunement. Finalement, vous devez tracer, sous votre arbre une courbe montrant l’amplitude du vent pour toute l’animation et un pointeur indiquant la position courante dans l’animation. Contraintes Voici les contraintes du laboratoire : GPA665 LABORATOIRE 3 vous devez utiliser le langage de programmation C ou C++; vous ne devez utiliser aucune variable globale; vous devez allouer une structure de données de type arbre et la libérer convenablement. STRUCTURES DE DONNEES ET ALGORITHMES ÉTE 2004 4/7 Exemples disponibles Vous trouverez sur le site web du cours quelques exemples. À titre de référence, voici la fonction qui a été utilisée pour générer la courbe du vent pour chacune de ces exemples : 1 5 1 3 f x sin x cos x 2 2 2 2 1.5 1 0.5 0 -0.5 4 6 5. 6. 2 5. 6 8 4. 6 3. 4 2 3. 4 8 4. 4 6 1. 2. 2 1. 2 8 0. 2. 4 0. -1 0 Amplitude du vent Fonction intéressante Temps Figure 1 : Exemples de courbe utilisée pour représenter le vent Évaluation L’évaluation de ce laboratoire sera différente des deux laboratoires précédents et permettra à l’évaluateur de faire une évaluation interactive. L’évaluation sera en trois parties : 1. Comme d’habitude, vous devez produire un rapport comprenant un organigramme général du déroulement de votre programme (1 page). Vous devez aussi remplir la grille d’évaluation. Par contre, notez qu’il n’y aura pas de questions à répondre par écrit. 2. Vous aurez à faire une brève présentation orale au chargé de laboratoire. Cette présentation d’une dizaine minutes vous donnera la chance d’expliquer en détail les éléments importants du laboratoire. Par exemple, vous pouvez expliquer votre approche globale, les difficultés que vous avez eues et les solutions que vous avez trouvées. 3. Finalement, vous aurez à répondre aux questions de l’évaluateur (environ 10 minutes également). Ces questions permettront de bien cerner votre niveau de compréhension. L’évaluation se fera pendant la semaine d’examen. La date exacte n’est pas déterminée mais l’évaluation sera pendant la période des examens finaux. Lors des deux dernières périodes de laboratoire, une feuille circulera vous permettant de réserver un bloc horaire. C’est votre responsabilité de vous présenter à cette évaluation. GPA665 LABORATOIRE 3 STRUCTURES DE DONNEES ET ALGORITHMES ÉTE 2004 5/7 À titre indicatif, voici des exemples de questions qui pourraient vous être posées : Quelle est la pertinence de la structure de données choisie dans ce laboratoire ? Est-ce que cette représentation des données est supérieure à un autre choix de TDA ? Quels sont les avantages et les inconvénients du TDA choisi par rapport à un autre TDA (de votre choix) ? Comment pourrait-on modifier la structure de données que vous avez définie afin de permettre l’addition de feuilles, de fruits ou d’autres éléments qui apparaissent aléatoirement aux dernières branches de l’arbre ? Chez un arbre réel, il est possible que des branches seules ou des groupes de branches apparaissent après une longueur constante sur un tronc, ou simplement à des longueurs plus ou moins aléatoires. Nous voulons permettre que des branches sortent d’un nœud qui se trouverait au milieu (et non pas à l’extrémité) d’une branche. Expliquez comment cela est réalisable par une modification de votre structure de données. La remise se fait par un fichier ZIP correspondant aux éléments suivants : Le dossier principal de votre projet Visual C++ incluant tous ses dépendants (sauf les librairies principales du C/C++). N’oubliez pas de bien documenter votre code source. Une version exécutable de votre programme. Un PDF de votre rapport. Le fichier doit être nommé : GPA665_LAB3_AnimArbre_VotreNom.ZIP Le tout doit être remis par courriel au chargé de laboratoire avant la date prescrite. GPA665 LABORATOIRE 3 STRUCTURES DE DONNEES ET ALGORITHMES ÉTE 2004 6/7 Grille d’évaluation En guise d’autoévaluation, imprimez et remplissez vous-même cette section. Mentionnez une référence (nom de fichier et numéro de ligne) lorsque demandé pour faciliter la vérification par le correcteur. Spécifications techniques Oui Non Référence (fichier, ligne) 5 Modélisation complète de l’effet du vent sur l’arbre, intégration avec le lab. 2 5 Influence de la force du vent sur l’amplitude de la déformation 5 Influence du niveau de la branche sur la déformation due au vent _____________________ 5 Influence de l’orientation de la branche sur la déformation due au vent _____________________ 5 Modélisation et affichage d’un vent horizontal variable _____________________ 5 Modélisation réaliste, correcte et fluide Spécifications de programmation _____________________ Oui Non 5 Structures de données, TDA arbre _____________________ 5 Gestion dynamique de la mémoire et libération de l’espace alloué _____________________ (-10) Aucune variable globale Qualité logicielle T.B. Bon Pauvre Référence (fichier, ligne) 5 Modularité : usage généralisé de fonctions et regroupement logique en modules _____________________ 5 Robustesse : Précaution pour éviter les problèmes de données erronées, etc. _____________________ 5 Documentation : Commentaires pertinents qui accélèrent la compréhension du code _____________________ 5 Clarté du code : Code concis et court utilisant les fonctions adaptées _____________________ 60 TOTAL _____________________ _____________________ _____________________ _____________________ Section réservée au correcteur : GPA665 LABORATOIRE 3 / 10 Organigramme / 30 Réponses aux questions / 60 Respect des spécifications / 100 Total STRUCTURES DE DONNEES ET ALGORITHMES ÉTE 2004 7/7