[C++]Matrice de transformations

Fermé
elodie - 4 mars 2007 à 12:49
mamiemando Messages postés 33410 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 2 décembre 2024 - 6 nov. 2009 à 13:21
Hello,

est-ce que quelqu'un pourrait m'indiquer comment s'obtient les matrices de rotation, translation, homothétie pour un point en 2D.
J'ai une classe Point :
class Point{
int x;
int y;
...
}

class Matrice{
double [2][2];
public void rotation(){

}

public void translation(){

}

public void homothetie(){

}
}


Merci

5 réponses

mamiemando Messages postés 33410 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 2 décembre 2024 7 808
3 mai 2008 à 13:23
Tu peux regarder ici :
https://fr.wikipedia.org/wiki/Rotation_vectorielle

Le problème c'est que si le centre n'est pas O ce n'est plus une transformation linéaire ((ie sous la forme Y = A.X) donc tu ne peux pas l'exprimer sous forme de produit matriciel

En gros il faudrait faire une translation -T (ou T désigne la transformation qui transforme O en ton centre de rotation) avant, faire une rotation R, puis faire une translation de -T. Soit I la matrice identité. Ta rotation est alors pour un point X s'écrit :
Y = R.(X - T) + T
Y = A.X + B

avec A = R et B = (I-R).T (transformation affine).
Bonne chance
1
Bjr!

Si on prend chaque tranformation indépendamment, on a:
-pour la tranlation, Tt = [1 0 dx ; 0 1 dy ; 0 0 1]
-pour le changement d'échelle,Ts = [k 0 0 ; 0 k' 0 ; 0 0 1]
-pour la rotation, Tr = [cos(i) -sin(i) 0 ; sin(i) cos(i) 0 ; 0 0 1]
-réflexion par rapport à l'axe des x par exple, Tr' = [1 0 0 ; 0 -1 0 ; 0 0 1]

Je voudrai savoir comment s'exprime la matrice de transformation affine T = [m1 m2 m3 ; m4 m5 m6; m7 m8 m9 ] lorsqu'on souhaite que cette matrice tient compte à la fois du changement d'échelle, de la rotation, de la translation et de la réflection également.
0
lirey83 Messages postés 75 Date d'inscription mardi 2 janvier 2007 Statut Membre Dernière intervention 18 août 2007 13
4 mars 2007 à 21:25
Si je ne trompe pas, pour la translation il suffit d'additionner le vecteur de translation, pour l'homothétie de multiplier par le facteur et pour la rotation de multiplier par la matrice ((cos(T), sin(T)), (-sin(T), cos(T))) ou T est l'angle de rotation. Donc on utilise une matrice que dans le cas de la rotation.
0
A savoir que tu as indiqué une matrice de rotation d'angle T (et tu as sous entendu que la rotation était de centre O(0,0))
0
elhandy Messages postés 1 Date d'inscription samedi 3 mai 2008 Statut Membre Dernière intervention 3 mai 2008
3 mai 2008 à 12:06
Salut!
Et pour le cas ou la rotation ne se fera pas par rapport à l'origine c'est quoi qui change ?!
0
mamiemando Messages postés 33410 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 2 décembre 2024 7 808
6 nov. 2009 à 01:18
A priori c'est une homotéthie H = K.R et une translation et elle s'exprime sous la forme : Y = H.(X - T) + T

avec :
H = K.R avec K la matrice qui effectue le rapport d'échelle,
R la matrice de rotation,
T le vecteur de translation,
X le vecteur associé au point auquel on applique la transformation.

Enfin j'ai pu me tromper mais au feeling ça doit être ça.

Bonne chance
0
Merci pour ta réponse.

Je présume donc que si on souhaite rajouter la transformation de réflexion R'.
On obtient H = K.R.R'
K la matrice qui effectue le rapport d'échelle
R la matrice de rotation

J'étudie un modèle de mouvement affine tel que X'=AX+d,
avec A = 1+D
D = [Dxx Dxy; Dyx Dyy]
d = [dx ;dy]
où D est la matrice de déformation (qui englobe rotation, changement d'échelle et réflexion)
et d une translation pure.
je souhaiterai exprimer les paramètres Dxx,Dxy,Dxy et Dyy en fonction des paramètres utilisé à la fois
pour des transfo de rotation, de changement d'échelle..
Rappel des transfo:
-pour la tranlation, Tt = [1 0 dx ; 0 1 dy ; 0 0 1]
-pour le changement d'échelle,Ts = [k 0 0 ; 0 k' 0 ; 0 0 1]
-pour la rotation, Tr = [cos(i) -sin(i) 0 ; sin(i) cos(i) 0 ; 0 0 1]
-réflexion par rapport à l'axe des x par exple, Tr' = [1 0 0 ; 0 -1 0 ; 0 0 1]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33410 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 2 décembre 2024 7 808
6 nov. 2009 à 13:21
Bon en fait ici c'est pas un forum de maths, donc dans le doute il vaudrait mieux te renseigner via d'autres sources parce que ce n'est pas forcément notre spécialité et on peut se craquer.

En fait en maths, une rotation r, un changement d'échelle k, une réflexion m et plus généralement une homotéthie h centrées en O (l'origine du repère) sont des transformations linéaires, c'est-à-dire qu'elles s'expriment sous la forme Y = A.X ou X est le vecteur associé au point transformé, Y le point transformé, et A la matrice associée à la transformation (respectivement R, K, M ou H).

D'un point de vue matriciel, une composition de fonctions linéaires revient à un produit matriciel. De la même façon que la composition de fonction n'est en général pas commutative, un produit matriciel ne l'est pas plus sauf dans des cas particuliers. Ainsi en général :

- f o g n'est pas égal à g o f (ou o est l'opérateur "rond", l'opérateur de composition des fonctions)
- F . G n'est pas égal à G . F.

Si tu regardes la formule du produit matriciel, tu peux facilement montrer que si F ou G est diagonale, alors F.G = G.F... ce qui est le cas ici avec ta matrice de facteur d'échelle K et de rotation R. Idem avec la matrice de réflexion M. D'un point de vue géométrique, cela revient à dire "peu importe l'ordre dans lequel on fait la rotation, la réflexion et le facteur d'échelle" : H = M.K.R = R.K.M = ...

Le problème, c'est quand la transformation n'est pas centrée en O (ce qui somme toute est souvent le cas), par exemple centrée en O'. Dans ce cas là il faut faire un changement de repère de sorte à se ramener au cas que l'on connaît. C'est le rôle de la translation t qui transforme O' en O. Ensuite on applique la transformation H puis on revient en O'. Concrètement, ceci revient à soustraire/ajouter un vecteur T, d'où la formule que je t'ai donné. Tu constates du coup que la formule n'est plus linéaire (de la forme Y = A.X) mais affine (car Y = H.(X - T) + T est bien de la forme Y = A.X + B).

À présent, si tu as tout bien suivi, il suffit d'exprimer chacune de tes matrices avec les bons coefficients, regarder un cours sur les matrices pour apprendre à calculer un produit et une addition matricielle et c'est plié ;-)

Bonne chance
0