# Applications > Dveloppement 2D, 3D et Jeux > Moteurs 3D >  changement de repere

## ryu20

bonjour,
j'essaie d'effectuer un changement de repre. Je travaille sous Java3D. J'ai tent avec des matrices des changements de repre moi mme, mais je n'obtiens pas la bonne transformation.
J'ai tent par une mthode un peu plus bourrine, mais j'ai un soucis de compression sur un axe et ca rend assez moche.


```

```

est ce que quelqu'un saurait o ma fonction est fausse? Ou mieux, quelqu'un pourrait il m'indiquer o est ce que je peux trouver une fonction de changement de repre?

Merci

----------


## TNT89

Que cherches-tu  faire comme transformation? A priori tu travailles avec des vecteurs  3 coordonnes, tu veux faire des rotations?

Dans ton code, tu ne dis pas ce que sont U, V, W, Y...

 ::(:

----------


## ryu20

Bonjour,
Ce que je cherche  faire, c'est un changement de repre. 
En gros, j'ai des points dfinis dans le repre monde, mais je voudrais les convertir en fonction d'un nouveau referentiel.

X,Y,Z correspondent aux vecteurs de mon premier repre.
U,V,W correspondent aux vecteurs de mon second repre.
(je me suis tromp en recopiant  ::oops:: , le dernier produit vectoriel c'est U,V et non pas Y,V).

Donc pour faire simple, je voudrai exprimer les coordonnes d'un objet dans un nouveau repre dont je connais le centre et les vecteurs unitaires.
Merci.

----------


## Invit

Bonjour,
Je n'ai pas non plus trs bien compris le but.
Le changement de repre le plus simple, et ce qu'on entend gnralement par changement de repre est une translation.
X = x + TX;
Y = y + TY;
Z = z + TZ;
On peut aussi vouloir faire une homothtie, ce sera de la forme
X = x * kX + TX;
ou une rotation
X = x * rX + y * rY + z * rZ + TX;
o les termes rX, rY, rZ sont les paramtres de l'affinit, la rotation+homothtie  en est un cas particulier.  

Lorsqu'on fait une transformation sur une figure, un vecteur, un triangle ou un objet plus compliqu, on transforme chaque point, et non des vecteurs.

Si la question est "soit un repre E1 dfini par les vecteurs unitaires X, Y, Z et un repre E2 dfini par les vecteurs unitaires U, V, W comment transformer une figure F connue dans le repre E1, en une figure G dans le repre E2", alors il faut commencer par calculer les paramtres de la transformation, une affinit dans le cas gnral, et appliquer la formule  tous les points de F pour obtenir la figure G.

Je connais bien cette transformation en 2D, il y a 6 paramtres. 
En 3D, je ne suis pas tout  fait sr de moi, je pense qu'il y a 12 paramtres.

----------


## Frifron

Ton repere R2 est dfinie dans ton repre R1 par une matrice M (la matrice de passage de R2 vers R1)

Pour passer du repre R1 au repre R2, il faut multiplier par la matrice de passage de R1 vers R2 soit l'inverse de M tout simplement.

----------


## ryu20

je suis entirement d'accord avec toi fifron.
Le HIC, c'est que j'ai toujours appris que pour construire cette matrice, il faut les 3 vecteurs unitaires de R2 exprims dans R1 et le centre de R2 exprim dans R1.

Soit R1 (O,X,Y,Z)
et R2(E,U,V,W)

avec E(Ex,Ey,Ez) Exprims dans R1
et U(Ux,Uy,Uz), V(Vx,Vy,Vz) et W(Wx,Wy,Wz) exprims dans R1.

La matrice de passage donne donc 
Ux Vx Wx Ex
Uy Vy Wy Ey
Uz Vz Wz Ez
.0. .0. .0. 1

mais sur certains exemple a ne marche pas (en tous cas pas sur ce que j'ai pris pour faire mes tests et ils sont relativement simple).

peut tre que je me suis tromp de formule, mais je n'en trouve pas d'autre.

----------


## Invit

Question, 
On travaille en 3D ou en 2.5D?
Si c'est en 3D, pourquoi le troisime vecteur unitaire de R2 est Z et non pas W.
Si c'est en 2.5D, alors l on se complique la vie inutilement.  ::(: 
Je pose la question autrement, si les lments tudis ont un rapport avec une reprsentation sur le terrain, o la verticale, c'est  dire la direction de la gravit est unique, alors, il faut faire le changement de base  en 2D et ventuellement la coordonne Z aura  subir une translation (une simple addition)
Si il s'agit de la seconde hypothse, c'est une opration courante.
Cordialement.

----------


## ryu20

Mille excuses... c'est bien en 3D "vritable", je me suis juste tromp en crivant (ca devient une habitude ^^)

merci pour cette remarque.

----------


## Invit

Bon, alors il faut tablir la formule.
Un autre point m'est venu  l'esprit entre temps, si les coordonnes rsultantes comportent beaucoup de chiffres, il me parait indispensable que le rsultat soit de la forme P = T + f(...), sinon, il y aura forcment des problmes de prcision. Les relations rsultant de calculs matriciel tels qu'ils sont crits dans le programme font perdre la prcision.
La solution consiste peut-tre  dfinir les translations ds le dpart (?)
De mmoire, pour tablir la formule, il faut projeter les axes du systme destination dans le systme origine.   
Il faut faire intervenir l'angle de rotation de chaque axe. A premire vue, c'est tout de mme un calcul compliqu.
S'il n'y a pas d'autre solution, je veux bien le faire (?)
Cordialement.

----------


## Frifron

> jLa matrice de passage donne donc 
> Ux Vx Wx Ex
> Uy Vy Wy Ey
> Uz Vz Wz Ez
> .0. .0. .0. 1


C'est ca, mais attention c'est la matrice de passage de R2 vers R1. Si tu es bien d'accord avec ca et que tu ne trouves pas les rsultats escompts c'est que tu te trompes dans le sens de la multiplication. Comme tu travailles avec des vecteurs colonnes, il faut multiplier a gauche.

Soit P1 les coordonnes d un point exprim dans R1 et P2 les coordonnes de ce mme point exprim dans R2. Soit M21 la matrice de passage de R2 vers R1 (celle que tu donnes au dessus)

Alors P2 = M21 x P1

La matrice de passage M12 qui permet de passer de R1 a R2 est quand a elle l'inverse de M21.

Si tu travailles avec des repere orthonorms, c'est a dire que M21 est la composition d'une rotation et d'un translation alors on peux dcomposer :

M21 = T x R
d'ou M12 = inv(T x R) = inv(R) x inv(T)
R etant une rotation, donc une matrice orthogonale, son inverse est gale a sa transpose. L'inverse d'une translation quand a elle etant simplement la translation inverse (inversion du signe des coordonnes)

On a donc :
M12 = t(R) x inv(T)

Soit en faisant le calcul :

M12 =
Ux     Uy     Uz     -Ux*Ex-Uy*Ey-Uz*Ez
Vx     Vy     Vz     -Vx*Ex-Vy*Ey-Vz*Ez
Wx    Wy    Wz     -Wx*Ex-Wy*Ey-Wz*Ez
0        0        0        1

----------


## ryu20

Je ne te remercierai jamais assez...
j'aurai pu chercher longtemps avant de trouver mon erreur.

merci encore.

----------

