EulerMatrix com eixos diferentes de X, Y e Z

Oct 07 2020

A função Mathematica EulerMatrix[{Alpha, Beta, Gamma},{a,b,c}]fornece a matriz de Euler para rotação em torno dos eixos X, Y e Z. Aqui, ao escolher a ordem de a, bec, podemos alterar a ordem das rotações em relação aos três eixos.

Minha pergunta é: como encontrar a matriz de Euler para uma rotação para a qual os eixos "antigos" não sejam os eixos X, Y e Z. Por exemplo, quero encontrar uma matriz de Euler no formato {3, 1, 3} para a qual os eixos antigos são, eixo 1 = {1, -1, 0}, eixo 2 = {1, 1, -2} e eixo 3 = {1, 1, 1}.

Apreciará qualquer ajuda. obrigado

Respostas

2 DanielHuber Oct 07 2020 at 16:55

É mais simples trabalhar com eixos normalizados. Se você tem eixos antigos dados por: old = {{1,0,0}, {0,1,0}, 0,0,1}} e deseja rotação de Euler em torno de novos eixos: novos, você pode girar um vetor vec em relação ao novo sistema transformando primeiro o vetor para o novo sistema, aplique a rotação de Euler e transforme o vetor de volta ao sistema antigo.

Para este fim, definimos uma matriz de rotação (matriz de rotação do eixo): braço que gira os eixos antigos em novos eixos. Observe que as colunas desta matriz são o novo eixo no sistema antigo. Além disso, essa matriz transforma as coordenadas do sistema antigo em coordenadas do novo sistema. Definimos uma segunda matriz de rotação (matriz de rotação vetorial): vrm, que gira um vetor vec = {1,1,1} / Sqrt [3] no novo sistema. Aqui está o código e os gráficos para isso:

old = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};
orig = {0, 0, 0};
vec = {1, 1, 1}/Sqrt[3];
Row[{Red, "Vector   ", Green, "New Axes   ", Black, "Old Axes"}]
Manipulate[
 arm = EulerMatrix[{a, b, c}];
 vrm = EulerMatrix[{va, vb, vc}];
 rotvec = Inverse[arm].vrm.arm.vec;(*here is the vector rotated*)
 Graphics3D[{
   Arrow[{orig, #}] & /@ old
   , Green, Arrow[{orig, #}] & /@ Transpose@arm, 
   MapThread[Text[#2, 1.1 #1] &, {Transpose@arm, {"xn", "yn", "zn"}}]
   , Red, Arrow[{orig, #}] &[rotvec]
   }, SphericalRegion -> True, Axes -> True, BoxRatios -> {1, 1, 1}, 
  PlotRange -> {{-1, 1}, {-1, 1}, {-1, 1}}]
 , {{va, 0, "a-vec"}, 0, 2 Pi}, {{vb, 0, "b-vec"}, 0, 
  Pi}, {{vc, 0, "c-vec"}, 0, 2 Pi}, {{a, 0, "a-axes"}, 0, 
  2 Pi}, {{b, 0, "b-axes"}, 0, Pi}, {{c, 0, "c-axes"}, 0, 2 Pi}]

2 Ferca Oct 07 2020 at 16:41

Editar:

Você pode usar RotationMatrixpara construir sua própria EulerMatrix girando em torno dos eixos personalizados 1,2 e 3.

Primeiro verifique se você pode reproduzir EulerMatrix[{\[Alpha], \[Beta], \[Gamma]}, {3, 1, 3}]com RotationMatrix:

RotationMatrix[\[Alpha], {0, 0, 1}].RotationMatrix[\[Beta], {1, 0,0}].RotationMatrix[\[Gamma], {0, 0, 1}]
(* Check this is equivalent to EulerMatrix[{\[Alpha], \[Beta], \[Gamma]}, {3, 1, 3}] *)
EulerMatrix[{\[Alpha], \[Beta], \[Gamma]}, {3, 1, 3}] - % // Simplify 
(* {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}} *)

Agora gire em torno de seus eixos personalizados 1,2,3 no formato 3-1-3:

(* Define custom axis *)
Axis1 = {1, -1, 0}; Axis2 = {1, 1, -2}; Axis3 = {1, 1, 1};
(* Euler Matrix in 3-1-3 format about the custom axis*)
RotationMatrix[\[Alpha], Axis3].RotationMatrix[\[Beta],Axis1].RotationMatrix[\[Gamma], Axis3]//Simplify