2010-03-26 26 views
1

J'ai deux coordonnées cartésiennes. Il y a XYZ et BIG XYZ. Je veux faire ceux-ci sont parallèles les uns aux autres. Par exemple, x parallèle à X, y parallèle à Y et z parallèle à Z. J'utilise une matrice de rotation mais j'ai beaucoup de différentes matrices de rotation. Par exemple j'ai un point 3D en coordonnées cartésiennes xyz et ça s'appelle A et je veux changer la coordonnée cartésienne en BIG XYZ et trouver le même point 3D dans cette coordonnée que l'on appelle B. Jusqu'à maintenant ça va. Mais quand j'ai utilisé une matrice de rotation différente, les points ont été changés. Que puis-je faire? Quelles rotations Euler puis-je utiliser?Quelles sont les rotations euler que je peux utiliser?

+0

Je vous recommande d'essayer mathoverflow.net –

+4

Trop trivial pour mathoverflow. – Jacob

+0

Combien de points souhaitez-vous aligner? Je suppose que vous essayez d'aligner les nuages ​​de points 3D? – Jacob

Répondre

1

Est-ce ce que vous cherchez?

% an orthonormal base ('old') 
x = [1; 0; 0]; 
y = [0; 1; 0]; 
z = [0; 0; 1]; 

% orthogonal (=rotation) matrix having this base as its columns 
Rold = [x, y, z]; 

% another orthonormal base ('new') 
X = [1; 1; 0]/sqrt(2); 
Y = [-1; 1; 1]/sqrt(3); 
Z = [1; -1; 2]/sqrt(6); 

% orthogonal matrix having this basis as its columns 
Rnew = [X, Y, Z]; 

% a "point" (indeed a vector; coordinates are with respect to the 'old' base, 
% so this is actually the point 1*x + 2*y + 3*z) 
A = [1; 2; 3] 

% point = [x y z] A = [x y z] |1| = [X Y Z] |p| = [X Y Z] B 
%        |2|   |q| 
%        |3|   |r| 
% where p,q,r are the unknown coordinates in the 'new' base 
% To find them, just multiply by the inverse (=transpose) of [X Y Z] 
B = Rnew'*Rold*A 

% Rnew'*Rold, i.e. transpose(Rnew)*Rold is the rotation you are searching