Document et code utile au démarrage
- Rappels de programmation de Java2D
- Notes de cours sur les transformations (partie 1)
- Programme de démarrage pour ce tp
du modèle à l'écran
On considère un ensemble de points dans leurs coordonnées d'origine traditionnellement dans un repère orthonormé direct (antihoraire, trigonométrique) (O,i,j). On considère que les coordonnées des points de l'ensemble sont comprises en x dans [minX,maxX] et en y par [minY, maxY]. On souhaite afficher ces points à l'écran dans une fenêtre ou dans une zone d'une fenêtre, appelée viewport, ayant son propre système de coordonnées et son propre repère. Le viewport constitue une zone d'affichage traditionnellement défini par les coordonnées du coin supérieur gauche (x0,y0), les dimensions de la zone (w,h), et un repère horaire.
On note (xm,ym) les coordonnées d'un point quelconque dans le modèle d'origine et (xv,yv) les coordonnées de ce même point dans le viewport.
- Quelle transformation permet de calculer (xv,yv) en fonction (xm,ym)?
- Implémenter cette transformation dans une classe
SpaceToViewport
paramétrée par les caractéristiques du modèle des points d'origine (minX, maxX, minY, maxY) et du viewport (x0,y0), w, h. - On envisage de représenter l'ensemble des points d'origine dans une seule zone de dessin et de mettre en oeuvre quelques interactions. Envisager les structures de données et mécanismes logiciels permettant de conserver pour chaque point, ses coordonnées dans le modèle et ses coordonnées à l'écran et de limiter le recalcul des coordonnées écran aux cas où le modèle change.
- Avec votre implémentation (1) afficher un ensemble de points donnés dans les coordonnées du modèle et (2) modifier interactivement les points en les sélectionnant et les déplaçant à l'écran à la souris.
- Mettre en oeuvre les interactions permettant les opérations d'édition suivantes: (1) ajout d'un point, (2) suppression d'un point existant et (3) déplacement d'un point.
Tester votre implémentation en utilisant ces jeux de données : spaceToViewport.zip
Ecriture matricielle d'application linéaires en coordonnées homogènes
Ecrire les matrices représentant les transformations suivantes en coordonnées homogènes:
- Identite, Similitude, Translation, Rotation, Homothetie, EtirementX, EtirementY, Projection sur une droite parallèlement à un vecteur, Symétrie glissée, Symétrie orthogonale.
- Calculer l’image d’un point : appliquer une matrice aux coordonnées homogènes du point.
- Afficher pour chaque transformation, l’image de ces figures.
Composition d'applications
- Quelles sont les transformations qui permettent de passer d’une figure à l’autre dans cette séquence de figures?
- Ecrire un programme qui construit ces figures:
- en utilisant les méthodes de définition et concaténation de transformation déjà définies
- en utilisant vos propres méthodes de calcul matriciel de l’exercice précédent
- Afficher les figures successivement et interactivement.
Transformation bifocale
- Afficher une grille de 20x20 éléments comme dans la figure ci-dessous.
- Appliquer une transformations bifocale sur les éléments de la grille. On peut prendre une fenêtre de 800x800 et pour les paramètres de la transformation bifocale prendre pour commencer a = 0.5, b = 0.7
- Modification interactive des valeurs respectives de a et de b. Par exemple, vous pouvez :
- utiliser la molette de la souris pour augmenter/diminuer les valeurs respectives de a et b ou/et
- afficher les axes correspondant à x=a, x=b et les déplacer à la souris pour modifier a et b.
Transformation fisheye
- Afficher une grille de 20x20 éléments comme dans la figure ci-dessous.
- Appliquer une transformations fisheye sur les éléments de la grille calculée en coordonnées cartésiennes, en prenant comme centre de la transformation les coordonnées du pointeur souris.
- Programmer les callbacks utiles pour que l’on puisse modifier interactivement les valeurs respectives de d, paramètre de la déformation fisheye vue en cours.
Jeu de trioker
- Afficher l’ensemble des 24 pièces du trioker dans une partie de la fenêtre.
- Interactions – il s’agit de rendre interactives les opérations suivantes
- translation d’une pièce pour l’amener à une position donnée en utilisant la souris
- rotation d’une pièce par rapport à son centre et un angle variable α
- rotation d’une pièce par rapport à l’un des sommets et un angle variable α
- ajustement automatique d'une pièce à côté d'une autre lorsque la pièce est suffisamment proche en distance et en orientation de l'autre.
- Afficher alternativement chacun de ces puzzles. NB : les exemples ne contiennent que les sommets du contour du puzzle.
- En utilisant les interactions définies en 2, rendre possible la construction de l’un de ces puzzles.
- Questions subsidiaires :
- Calculer automatiquement la triangulation affichée pour chaque puzzle et rendre possible l’affichage/le masquage de cette triangulation.
- Lorsque la triangulation est affichée, mettre en œuvre un mécanisme interactif d’attraction pour que lorsque le joueur déplace une pièce vers le puzzle, l’ajustement de la pièce à la maille la plus proche maille soit facilité sans pour autant que le déplacement des pièces s’en trouve entravé.
- Proposer une esquisse de gameplay d’un jeu à n joueurs exploitant les interactions réalisées.