Me gustaría hacer la rotación final usando ángulos de Euler. En este enlaceÁngulos de Euler, la rotación final sufre tres rotaciones sucesivas, comenzando en el cuadro (x,y,z), pasando por (x',y',z') y luego (x'',y'',z'') y finalmente terminando con marco (x''',y''',z'''). he visto estocorreoy me ayudó hasta cierto punto. En mi caso, la primera rotación produce
La segunda rotación produce
Ahora la tercera rotación no arroja lo que está en el enlace antes mencionado.
x2, x3 deben apuntar en la misma dirección.
este es el codigo
\documentclass[preview,varwidth ,multi,border=3pt]{standalone}
\usepackage{tikz}
\usepackage{tikz-3dplot}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{1cm}
\begin{document}
\tdplotsetmaincoords{70}{100}
\begin{tikzpicture}[scale=5,tdplot_main_coords]
\coordinate (O) at (0,0,0);
% main Frame (x,y,z)
\draw[thick,->,line width=0.55mm] (O) -- (2.0,0,0) node[anchor=north west]{$X$};
\draw[thick,->,line width=0.55mm] (O) -- (0,2.0,0) node[anchor=west] {$Y$};
\draw[thick,->,line width=0.55mm] (O) -- (0,0,2.0) node[anchor=south] {$Z$};
% define yaw, pitch, and roll
\def \yaw {30}
\def \roll {30}
\def \pitch {30}
%_____________________________________________________________________
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%( Yaw )%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% First rotation yields Frame 1 (about z axis main)
% Frame 1 (x1,y1, z1)
\tdplotsetrotatedcoords{\yaw}{0}{0}
\draw[thick,->,line width=0.65mm, color=red, tdplot_rotated_coords]
(O) -- (1.5,0,0) node[xshift=0mm,anchor=north west] {$x^{1}$};
\draw[thick,->,line width=0.65mm, color=red, tdplot_rotated_coords]
(O) -- (0,1.5,0) node[anchor=west]{$y^{1}$};
\draw[thick,->,line width=0.65mm, color=red, tdplot_rotated_coords]
(O) -- (0,0,1.5) node[anchor=south,xshift=3mm, yshift=-1mm]{$z^{1}$};
%_____________________________________________________________________
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%( Pitch )%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Second rotation yields Frame 2 (about y1 axis)
% Frame 2 (x2,y2, z2)
\tdplotsetrotatedcoords{\yaw}{\pitch}{0}
\draw[thick,->,line width=0.65mm, color=blue, tdplot_rotated_coords]
(O) -- (1.0,0,0) node[xshift=0mm,anchor=north west]{$x^{2}$};
\draw[thick,->,line width=0.65mm, color=blue,tdplot_rotated_coords]
(O) -- (0,1.0,0) node[anchor=west]{$y^{2}$};
\draw[thick,->,line width=0.65mm, color=blue,tdplot_rotated_coords]
(O) -- (0,0,1.0) node[anchor=south,xshift=3mm, yshift=-1mm]{$z^{2}$};
%_____________________________________________________________________
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%( Roll )%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Third rotation yields Frame 3 (about x2 axis) <-- (it should be )
% Frame 3 (x3,y3,z3)
\tdplotsetrotatedcoords{\yaw}{\pitch}{\roll}
\draw[thick,->,line width=0.65mm, color=green, tdplot_rotated_coords]
(O) -- (0.5,0,0) node[xshift=0mm,anchor=north west]{$x^{3}$};
\draw[thick,->,line width=0.65mm, color=green,tdplot_rotated_coords]
(O) -- (0,0.5,0) node[anchor=west]{$y^{3}$};
\draw[thick,->,line width=0.65mm, color=green,tdplot_rotated_coords]
(O) -- (0,0,.5) node[anchor=south]{$z^{3}$};
\end{tikzpicture}
\end{document}
Respuesta1
Creo que esto puede ser un duplicado deCoordenadas del sistema de navegación en tikz-3dplot: De forma predeterminada, tikz-3dplot
utiliza la secuencia de rotación ZYZ (es decir, primero gira alrededor del eje Z, luego alrededor del nuevo eje Y Y', luego alrededor del nuevo eje Z Z''), mientras desea la secuencia de rotación ZYX. Para ello, hay que redefinir los parámetros de transformación:
\newcommand{\tdseteulerxyz}{
\renewcommand{\tdplotcalctransformrotmain}{%
%perform some trig for the Euler transformation
\tdplotsinandcos{\sinalpha}{\cosalpha}{\tdplotalpha}
\tdplotsinandcos{\sinbeta}{\cosbeta}{\tdplotbeta}
\tdplotsinandcos{\singamma}{\cosgamma}{\tdplotgamma}
%
\tdplotmult{\sasb}{\sinalpha}{\sinbeta}
\tdplotmult{\sasg}{\sinalpha}{\singamma}
\tdplotmult{\sasbsg}{\sasb}{\singamma}
%
\tdplotmult{\sacb}{\sinalpha}{\cosbeta}
\tdplotmult{\sacg}{\sinalpha}{\cosgamma}
\tdplotmult{\sasbcg}{\sasb}{\cosgamma}
%
\tdplotmult{\casb}{\cosalpha}{\sinbeta}
\tdplotmult{\cacb}{\cosalpha}{\cosbeta}
\tdplotmult{\cacg}{\cosalpha}{\cosgamma}
\tdplotmult{\casg}{\cosalpha}{\singamma}
%
\tdplotmult{\cbsg}{\cosbeta}{\singamma}
\tdplotmult{\cbcg}{\cosbeta}{\cosgamma}
%
\tdplotmult{\casbsg}{\casb}{\singamma}
\tdplotmult{\casbcg}{\casb}{\cosgamma}
%
%determine rotation matrix elements for Euler transformation
\pgfmathsetmacro{\raaeul}{\cacb}
\pgfmathsetmacro{\rabeul}{\casbsg - \sacg}
\pgfmathsetmacro{\raceul}{\sasg + \casbcg}
\pgfmathsetmacro{\rbaeul}{\sacb}
\pgfmathsetmacro{\rbbeul}{\sasbsg + \cacg}
\pgfmathsetmacro{\rbceul}{\sasbcg - \casg}
\pgfmathsetmacro{\rcaeul}{-\sinbeta}
\pgfmathsetmacro{\rcbeul}{\cbsg}
\pgfmathsetmacro{\rcceul}{\cbcg}
}
}
Luego puedes activar la nueva secuencia de rotación usando \tdseteulerxyz
.
Aquí está el código completo:
\documentclass[border=3pt]{standalone}
\usepackage{tikz}
\usepackage{tikz-3dplot}
\newcommand{\tdseteulerxyz}{
\renewcommand{\tdplotcalctransformrotmain}{%
%perform some trig for the Euler transformation
\tdplotsinandcos{\sinalpha}{\cosalpha}{\tdplotalpha}
\tdplotsinandcos{\sinbeta}{\cosbeta}{\tdplotbeta}
\tdplotsinandcos{\singamma}{\cosgamma}{\tdplotgamma}
%
\tdplotmult{\sasb}{\sinalpha}{\sinbeta}
\tdplotmult{\sasg}{\sinalpha}{\singamma}
\tdplotmult{\sasbsg}{\sasb}{\singamma}
%
\tdplotmult{\sacb}{\sinalpha}{\cosbeta}
\tdplotmult{\sacg}{\sinalpha}{\cosgamma}
\tdplotmult{\sasbcg}{\sasb}{\cosgamma}
%
\tdplotmult{\casb}{\cosalpha}{\sinbeta}
\tdplotmult{\cacb}{\cosalpha}{\cosbeta}
\tdplotmult{\cacg}{\cosalpha}{\cosgamma}
\tdplotmult{\casg}{\cosalpha}{\singamma}
%
\tdplotmult{\cbsg}{\cosbeta}{\singamma}
\tdplotmult{\cbcg}{\cosbeta}{\cosgamma}
%
\tdplotmult{\casbsg}{\casb}{\singamma}
\tdplotmult{\casbcg}{\casb}{\cosgamma}
%
%determine rotation matrix elements for Euler transformation
\pgfmathsetmacro{\raaeul}{\cacb}
\pgfmathsetmacro{\rabeul}{\casbsg - \sacg}
\pgfmathsetmacro{\raceul}{\sasg + \casbcg}
\pgfmathsetmacro{\rbaeul}{\sacb}
\pgfmathsetmacro{\rbbeul}{\sasbsg + \cacg}
\pgfmathsetmacro{\rbceul}{\sasbcg - \casg}
\pgfmathsetmacro{\rcaeul}{-\sinbeta}
\pgfmathsetmacro{\rcbeul}{\cbsg}
\pgfmathsetmacro{\rcceul}{\cbcg}
}
}
\begin{document}
\tdseteulerxyz
\tdplotsetmaincoords{70}{100}
\begin{tikzpicture}[scale=5,tdplot_main_coords]
\coordinate (O) at (0,0,0);
% main Frame (x,y,z)
\draw[thick,->,line width=0.55mm] (O) -- (2.0,0,0) node[anchor=north west]{$X$};
\draw[thick,->,line width=0.55mm] (O) -- (0,2.0,0) node[anchor=west] {$Y$};
\draw[thick,->,line width=0.55mm] (O) -- (0,0,2.0) node[anchor=south] {$Z$};
% define yaw, pitch, and roll
\def \yaw {30}
\def \roll {30}
\def \pitch {30}
%_____________________________________________________________________
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%( Yaw )%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% First rotation yields Frame 1 (about z axis main)
% Frame 1 (x1,y1, z1)
\tdplotsetrotatedcoords{\yaw}{0}{0}
\draw[thick,->,line width=0.65mm, color=red, tdplot_rotated_coords]
(O) -- (1.5,0,0) node[xshift=0mm,anchor=north west] {$x^{1}$};
\draw[thick,->,line width=0.65mm, color=red, tdplot_rotated_coords]
(O) -- (0,1.5,0) node[anchor=west]{$y^{1}$};
\draw[thick,->,line width=0.65mm, color=red, tdplot_rotated_coords]
(O) -- (0,0,1.5) node[anchor=south,xshift=3mm, yshift=-1mm]{$z^{1}$};
%_____________________________________________________________________
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%( Pitch )%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Second rotation yields Frame 2 (about y1 axis)
% Frame 2 (x2,y2, z2)
\tdplotsetrotatedcoords{\yaw}{\pitch}{0}
\draw[thick,->,line width=0.65mm, color=blue, tdplot_rotated_coords]
(O) -- (1.0,0,0) node[xshift=0mm,anchor=north west]{$x^{2}$};
\draw[thick,->,line width=0.65mm, color=blue,tdplot_rotated_coords]
(O) -- (0,1.0,0) node[anchor=west]{$y^{2}$};
\draw[thick,->,line width=0.65mm, color=blue,tdplot_rotated_coords]
(O) -- (0,0,1.0) node[anchor=south,xshift=3mm, yshift=-1mm]{$z^{2}$};
%_____________________________________________________________________
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%( Roll )%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Third rotation yields Frame 3 (about x2 axis) <-- (it should be )
% Frame 3 (x3,y3,z3)
\tdplotsetrotatedcoords{\yaw}{\pitch}{\roll}
\draw[thick,->,line width=0.65mm, color=green, tdplot_rotated_coords]
(O) -- (0.5,0,0) node[xshift=0mm,anchor=north west]{$x^{3}$};
\draw[thick,->,line width=0.65mm, color=green,tdplot_rotated_coords]
(O) -- (0,0.5,0) node[anchor=west]{$y^{3}$};
\draw[thick,->,line width=0.65mm, color=green,tdplot_rotated_coords]
(O) -- (0,0,.5) node[anchor=south]{$z^{3}$};
\end{tikzpicture}
\end{document}