Point dans un polygone qui change
Bonjour,
J’ai un point a une certaine position dans un polygone.
Puis je fait différentes opérations sur ce polygone : translation rotation et zoom
Comment déterminer la nouvelle position du point en fonction du nouveau polygone.
Merci
Point dans un polygone qui change
Bonjour :D,
Je crois que c'est d'abord une question de méthode, qui t'empêche de démarrer la rédaction du programme.
Tu dois commencer par te donner les outils appropriés. Les coordonnées des (Ns) sommets doivent être consignées dans un tableau, par des instructions du type:
Code:
1 2 3 4
| CONST Ns = 17;
TYPE Ve2D = RECORD x, y: Extended END;
Polygone = ARRAY[0..Ns - 1] OF Ve2D;
VAR Pol_0, Pol_1, Pol_2: Polygone; |
que tu traduiras dans le langage de ton choix.
Il faut ensuite définir la figure de départ, caractérisée par la variable (Pol_0), en attribuant une valeur à toutes les coordonnées par l'appel d'une procédure d'initialisation:
Code:
1 2 3 4 5 6
| PROCEDURE InitPol(VAR Pol: Polygone);
BEGIN
... / ...
END;
... / ...
InitPol(Pol_0); |
Les transformations géométriques évoquées conduiront à de nouvelles figures par des procédures appropriées affectant les (Ns) éléments du tableau:
a) une translation de vecteur T = (Tx, Ty) en codant les relations:
x' = x + Tx ; y' = y + Ty ;
b) une homothétie de rapport (f), centrée sur l'origine (O), en prenant:
x' = f * x ; y' = f * y ;
c) une rotation d'angle (t) autour de (O) par le produit matriciel utilisant la matrice carrée (citée de mémoire):
M = (< Cos(t) , -Sin(t) > , <Sin(t) , Cos(t) >) .
Les procédures correspondantes pourront se présenter extérieurement comme suit;
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| PROCEDURE Transl(Vtr: Ve2D; VAR PolA, PolB: Polygone);
BEGIN
... / ...
END;
PROCEDURE Hom(f: Extended; VAR PolA, PolB: Polygone);
BEGIN
... / ...
END;
PROCEDURE Rot(t: Extended; VAR PolA, PolB: Polygone);
BEGIN
... / ...
END; |