1 pièce(s) jointe(s)
Récupération des coordonnées lors d'une rotation
Bonsoir,
J'ai 4 composants (C1, C2, C3, C4) que je désire faire tourner autour du point C situé au centre d'une fiche (voir l'image).
Quel est l'algorithme à utiliser pour obtenir les coordonnées x, y de chacun des composants après rotation selon un angle r.
Est-il besoin de vous préciser que j'ai toujours été nul en maths et que la trigonométrie et moi çà fait deux :roll: ?
Merci d'avance pour votre aide.
1 pièce(s) jointe(s)
Algorithme de récupération des coordonées lors d'une rotation
Salut !
Si mes souvenirs sont corrects, il faut que tu utilise une matrice de rotation 2x2 étant donné que nous sommes dans le plan.
Soit A avec les coordonnées (x,y) et B(x',y') et M la matrice rotation. (Ici, je suppose que mon repère est O,I,J; mais les choses sont exactement les mêmes :) )
Cette matrice est définie comme ceci en dimension 2:
M = [cos (r), - sin r ; sin (r), cos (r) ]
Par un produit de matrice nous obtenons:
[x' , y' ] = [cos(r) * x - sin(r)*y , sin(r)* x + y* cos(r)]
Je te joins un exemple en image.
Algorithme de récupération des coordonnées lors d'une rotation
Bonjour, :D
Citation:
... Et force est de constater que, jusqu'à présent, aucun des intervenants n'a été capable d'apporter une réponse satisfaisante à la question initiale.
Autant dire que si le cours était de "niveau collège?", la solution au problème, autrement plus "compliqué[e]", ne l'est pas ...
Puisqu'apparemment tu es toujours en difficulté, je tente de proposer une solution impliquant le minimum de termes (et en y regardant de près, ce n'est pas facile ...).
Il est question de quatre points Ci (i = 1, 2,3,4) de coordonnées (xi, yi) tournant autour d'un point central C (Xc, Yc). Les relations exprimant la rotation concernent des différences de coordonnées Dxi = xi - Xc , Dyi = yi - Yc)
et doivent conduire aux nouvelles valeurs des coordonnées, notées (ui, vi).
Le coeur du calcul est:
Code:
1 2 3 4
|
Dx:= x[i] - Xc; Dy:= y[i] - Yc;
u[i]:= Xc + (Dx * Ca) - (Dy * Sa);
v[i]:= Yc + (Dx * Sa) + (Dy * Ca); |
Le programme se présenterait de la façon suivante (cela ressemble à du Pascal):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| PROGRAM xxx;
USES Crt;
CONST Np = 4; Pis180 = Pi / 180;
Type Tab = ARRAY[1..Np] OF Reel;
VAR u, v, x, y: Tab;
Ad, Ar, Ca, Sa, Dx, Dy: Reel;
i: Byte;
BEGIN
... / ... // Il faut initialiser les positions de départ (x, y) ainsi que l'angle de rotation exprimé en degrés
Ar:= Pis180 * Ad; // Passage des degrés aux radians
Ca:= Cos(Ar); Sa:= Sin(Ar); // Calcul des fonctions trigonométriques
FOR i:= 1 TO Np DO
BEGIN
// ici le précédent bloc d'instructions
END;
END. |
J'espère n'avoir rien oublié - tu apporteras les modifications nécessaires.
J'ai supposé les coordonnées réelles; s'il s'agit d'entiers, il n'y aura que quelques instructions supplémentaires.