Tables de multiplication

../../_images/4.png

Les objectifs de ce TP sont :

  • Écrire des méthodes java dont certaines prenent des tableaux en paramètres et/ou en retournent.

  • Générer de jolies animations en utilisant les possiblités de StdDraw.

Imagerie des tables de multiplication

On se propose de réaliser une construction géométrique basée sur le principe des tables de multiplication. Pour cela,

  • On répartit régulièrement n points sur le cercle de rayon 1 et de centre (0,0).

  • Chaque point est repéré par son indice i compris entre 0 et n-1.

  • On choisit ensuite un multiplicateur noté tt, puis pour chaque point d’indice i, on trace le segment qui le relie au point d’indice \(tt \times i\) (modulo n).

L’animation ci-dessous illustre la méthode de tracé pour n=15 et tt=3; tracé réalisé à l’aide de la classe StdDraw.

Défi n°1 : tt constant, n variable

À faire

  1. Écrire preCalc() qui calcule les coordonnées des points sur le cercle et les mémorise dans 2 tableaux 1D (ou un tableau 2D). La liste des paramètres est laissée à votre appréciation.

  2. Écrire drawTT() qui réalise le tracé de la table de multiplication pour un couple de valeurs (n, tt) donné.

  3. Écrire repPoints() qui repère chaque point par un texte représentant son indice, à l’extérieur du cercle. Ce repérage devient illisible si n est trop grand. La méthode repPoints() devra prendre cela en compte.

  4. Écrire animTTn() qui génère une animation en faisant varier n, comme dans l’animation ci-dessous, où n varie de 10 à 200.

Correction

TimesTables.java

Défi n°2 : tt variable, n constant

On va maintenant fixer la valeur de n et faire varier tt.

À faire

  1. Écrire animTTtt() qui génère une animation en faisant varier t, comme ci-dessous, où tt varie de 3.0 à 60.0 par pas de 0.1.

Indication

  • Lorsque n est suffisament grand, on peut gérer facilement les indices non entiers en selectionnant le point le plus proche.

  • L’exemple est réalisé avec n =200.

Correction

TimesTables.java

Défi n°3 : Ray tracing

Illustration du lancer de rayon avec 30 points.

Pour terminer, on va réaliser un lancer de rayon (ray tracing) depuis le point d’indice 0 vers tous les autres points repérés sur le cercle. Le rayon ainsi lancé vers le point d’indice i se réfléchit une fois sur le cercle avec un angle tel quel l’angle incident est égal à l’angle réfléchi. Le rayon réfléchi est tracé jusqu’à son intersection avec le cercle, comme l’illustre l’animation ci-dessus.

À faire

  1. Écrire rayTrace() qui trace les rayons incidents et réfléchis pour l’ensemble des n points.

Exemple : Animation obtenue en réalisant le lancer de rayon sur un ensemble de 200 points.

download

Correction