Какие вращения Эйлера я могу использовать? - PullRequest
1 голос
/ 26 марта 2010

У меня есть две декартовы координаты. Есть XYZ и BIG XYZ. Я хочу, чтобы они были параллельны друг другу. Например, x паралелируют к X, y параллельны Y, а z параллельны Z. Я использую матрицу вращения, но у меня много разных матриц вращения. Например, у меня есть 3D-точка в xyz декартовых координатах и ​​она называется A, и я хочу изменить декартову координату на BIG XYZ и найти ту же 3D-точку в этих координатах, которая называется B. До сих пор это нормально. Но когда я использовал другую матрицу вращения, точки менялись. Что я могу сделать? Какие вращения Эйлера я могу использовать?

1 Ответ

1 голос
/ 27 марта 2010

Это то, что вы ищете?

% 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
...