Transformation d'une fenêtre d'observation vers l'espace écran
Dans ce TP, il est important de distinguer les coordonnées d'un point dans l'espace euclidien \(R\times R\) (un couple de réels), des coordonnées de son projeté dans l'espace écran (un couple d'entiers naturels).
Exercice 1. Affichez une fenêtre, qui jouera le rôle d'écran virtuel. Ecrire une fonction qui trace un rectangle dans cet écran virtuel, à partir des paramètres de position et de dimension, et dont le rôle est de simuler une fenêtre (ou vue) virtuelle. Compléter l'exercice en offrant la possibilité, via l'appel d'une autre fonction, de déplacer cette fenêtre.
Exercice 2. Ecrire une fonction qui projette un point de l'espace euclidien (WC) dans l'espace écran DC (en passant par l'espace normalisé NC). Utilisez pour cela la transformation projective étudiée en TD pour construire la matrice qui réalise l'opération. On pourra contrôler l'exactitude de la matrice obtenue en vérifiant avec profit les calculs sur WolframAlpha (exemple : {{1/xw,0,0},{0,1/yw,0},{0,0,1}} * {{1,0,tx_1},{0,1,ty_1},{0,0,1}}). Cette fonction prendra en paramètre un point, une fenêtre d'observation (window) dans le plan euclidien et une vue (viewport) dans l'espace image. Concevoir les structures de données associées.
Exercice 3. Ecrire une fonction qui converti une séquence de points du plan euclidien en une séquence de points de la fenêtre écran et qui retourne cette séquence. Initialement, les points sont stockés dans un fichier texte sous forme de couples de floats (1 couple par ligne du fichier) et les coordonnées du couple sont simplement séparées par un espace. Il faut donc écrire une fonction qui lit un fichier de points et qui retourne une séquence.
Exercice 4. Pour tester visuellement cette première application, vous écrirez une fonction qui renvoie une séquence de points du plan formatés de la même façon que pour le fichier d'entrée de l'exercice 3. Ces points seront définis par une courbe polynomiale dont les coefficients seront passés en paramètres. Plus précisément, si le polynôme est a0 + a1X + . . . + akXk, la fonction prendra k + 4 paramètres : xmin xmax nbpoints a0 a1 ... ak
Les deux premiers paramètres définissent l'intervalle sur lequel on veut évaluer la fonction, nbpoints désigne évidemment le nombre de couples qu'il faudra calculer et le reste correspond aux coefficients du polynôme considéré. L'échantillonnage de l'intervalle sera uniforme. On prendra soin d'écarter les points qui ne sont pas dans la fenêtre d'observation (window). Pour évaluer une fonction polynomiale, on utilisera la factorisation de Horner qui vous permettra d'écrire un algorithme de complexité linéaire:
a0+ a1X + . . . + akXk= a0+X(a1+ X(a2+ X(a3+ . . . (ak -1+ ak X))))