TP-TD
Transcription
TP-TD
Introduction à la Programmation par Objets (L1-IPO) TP n° 7, Printemps 2012 Exercice 7.1 Ouvrez le projet Balle. Pour cela, il suffit d’ouvrir dans Processing l’un des deux fichiers du projet. Vous les trouverez alors automatiquement tous les deux dans les onglets de la fenêtre Processing qui s’ouvre. Lorsque vous demanderez « Save », Processing sauvera l’ensemble du projet ! Dans la fonction draw(), le canvas est effacé et ré-initialisé à un fond jaune à chaque nouvelle image. Une autre manière de faire consiste à utiliser de la transparence pour avoir une rémanence à l’écran des dernières positions de la balle. Voici comment faire : - mettez en commentaire (avec un //) l’instruction fill dans la fonction setup(), ainsi que l’instruction background dans la fonction draw(). - A la suite de background, insérez les trois lignes suivantes : fill(255,255,0,α); rect(0,0,width,height); fill(0,0,255); où α est l’argument de transparence (cf TP2, exercice 2), dans [0,255] (0 = transparent et 255 = opaque). Le premier fill fixe le mode de remplissage du rectangle qui suit, rect affiche un rectangle qui va opacifier l’image précédente, et le dernier fill sert à peindre la balle. Testez ce nouveau programme avec différentes valeurs de α. Quelle est la valeur qui vous paraît produire le plus « bel » effet (en toute subjectivité) ?… Exercice 7.2 Un « système de particules » est une technique graphique numérique utilisée par les logiciels de 3D ou d'effets vidéo. Elle permet de simuler de nombreux phénomènes naturels tels que feu, explosion, fumée, eau, nuage, poussière, neige, feux d'artifices, et animés à l'aide de propriétés telles que la gravité, du vent, l'inertie... (Wikipédia) Nous allons dans cet exercice simuler un feu d’artifice sous la forme de jets de particules. L’utilisation de la transparence donnera une véritable illusion de la réalité ! a) Programmez une classe Particule. Une particule sera un objet ayant six champs : - quatre champs x, y, vx, vy de type float. Au vu du cours 7, vous devinez bien entendu la signification de ces champs n’est-ce pas ?… - un champ entier r représentant le rayon de la particule. - un champ rand représentant un générateur de nombres aléatoires. Oui, il faudra donc importer la classe Random. Commencez par déclarer des champs et écrire un constructeur à 5 paramètres (pourquoi 5 ?). b) Une particule saura réagir à deux messages, un peu comme dans le cours 7 : - le message afficheToi() qui provoquera le dessin de la particule (un cercle). - Le message bouge() qui demande à la particule de bouger d’un pas élémentaire pour la transition d’image. Un peu comme la balle du cours, mais avec en plus la contrainte suivante : si la particule sort complètement du canvas, elle se régénère à son point de départ (le « canon » est situé au centre de la fenêtre). On ré-initialisera aussi sa vitesse en prenant une petite composante horizontale aléatoire, et une composante verticale aléatoire dirigée vers le haut. Vous trouverez ultérieurement de manière empirique les valeurs qui donnent le plus bel effet visuel ! c) Cliquez sur le bouton « flèche droite » situé en haut à droite de la fenêtre Processing et demander « New Tab » (nouvel onglet). Une nouvelle fenêtre d’édition s’ouvre, vous allez sauver cette fenêtre sous le nom « Animation ». Dans cette fenêtre, vous allez commencer par déclarer un tableau de 200 particules, puis définir les fonctions setup() et draw(). La fonction setup() initialise les 200 particules du tableau, et règle le canvas à une dimension 300 x 300 par exemple. Pour la fonction draw(), vous prendrez exemple sur ce qui a été fait dans l’exercice 1 : prenez un fond d’écran bleu nuit, et affichez les particules, n’oubliez pas la transparence ! Bon travail… N.B. Lorsque vous intialisez les vitesses la première fois, à la construction des particules, provoquez un effet d’explosion en prenant des vitesses verticales élevées ! Jouez avec les couleurs, dessinez le canon, envoyez un peu de vent de gauche à droite, etc. Introduction à la Programmation par Objets (L1-IPO) TD n° 7, Printemps 2012 Exercice 7.1 On souhaite modéliser un climatiseur par la classe Climatiseur. Un climatiseur est programmé avec une température exprimée en degré Celsius (un seul champ enCelsius). Cette consigne de température a une valeur initiale donnée en paramètre du constructeur. Il est muni de deux commandes (méthodes) pour augmenter() ou diminuer() la consigne de 1°C à la fois. Ajouter une méthode afficherTemp() qui affiche la température à la fois en °C et en °F. On rappelle que : °C = (°F - 32) * 9/5 Exercice 7.2 On veut maintenant améliorer la classe Climatiseur de l’exercice précédent et créer une classe Climatiseur2 pour ajouter une valeur de température minimale (champ min), une valeur maximale (champ max) et une valeur d’incrémentation (champ increment). Les valeurs minimale et maximale sont spécifiées une fois pour toute lors de la construction de l’objet. La valeur d’incrément est initialisée à 1 par le constructeur. Seules les valeurs strictement positives d’incrément sont acceptées. Exercice 7.3 Mon petit frère doit passer le bac à la fin de l’année et il veut que je l’aide à réviser la résolution des équations du deuxième degré. Comme je suis convaincu qu’il vaut mieux faire faire les calculs à l’ordinateur que les faire de tête, je décide de réaliser un programme en Processing. Proposer une classe Poly2 qui modélise un polynôme du second degré de la forme ax 2 +bx+c (rappel : en maths, la lettre « x » représente une « indéterminée »). On souhaite disposer des méthodes suivantes : eval(double x) : double // retourne la valeur au point x du polynôme delta() : double // retourne le discriminant du polynôme uneRacine() : double // retourne UNE racine réelle de ce polynôme toString() : String // retourne une représentation sous la forme ”ax2+bx+c” P P N.B. i) La racine carrée de x se note en Processing sqrt(x). ii) Ni Processing ni Java ne connaissent les nombres complexes ! Si l’on essaye de calculer la racine carrée de –5, le résultat sera un étrange « NaN » qui signifie : Not A Number ! Exercice 7.4 Avec les bonnes résolutions d’un début d’année, on veut se préparer aux résultats des examens qui viennent toujours trop vite. Pour cela, vous allez écrire une classe permettant le calcul de la moyenne. Nous ne sommes pas encore en mesure de faire une belle classe graphique qui imprime un bulletin (et pourquoi pas après tout ?) mais on peut d’ores et déjà faire une classe un tant soit peu utile. Nous utiliserons des nombres approchés. a) De quoi a-t-on besoin pour calculer une moyenne ? b) Proposer une programmation de la classe Moyenne. Cette classe aura au minimum une méthode saisieNote(note) qui permet d’entrer une nouvelle note et une méthode moyenne() pour calculer la moyenne des notes entrées jusqu’à présent.