我对以下代码有点困惑。我认为下面的代码会产生一个围绕 x、y 和 z 轴旋转 90 度的动画,但动画的第一部分看起来像是围绕 z 轴而不是 x 轴旋转。有什么想法吗?
\documentclass[xcolor=dvipsnames]{beamer}
\usepackage{tikz}
\usepackage[english]{babel}
\usepackage{animate} % Animations
\usepackage{tikz-3dplot}
\usepgflibrary{arrows}
\usetikzlibrary{decorations.markings, arrows, decorations.pathmorphing,
backgrounds, positioning, fit, shapes.geometric}
\def\drawaxes{
\draw[thick,->] (0,0,0) -- (5,0,0) node[anchor=north east]{$x$};
\draw[thick,->] (0,0,0) -- (0,5,0) node[anchor=north west]{$y$};
\draw[thick,->] (0,0,0) -- (0,0,5) node[anchor=south]{$z$};
}
\begin{document}
\begin{frame}
\begin{center}
\begin{animateinline}[autoplay, controls, poster=first]{60}
\multiframe{90}{iFrame=0+1}{
\tdplotsetmaincoords{0}{0}
\begin{tikzpicture}[tdplot_main_coords]
\draw (-5cm, -3cm) rectangle (5cm, 3cm);
\tdplotsetrotatedcoords{\iFrame}{0}{0}
\begin{scope}[color=red,
tdplot_rotated_coords,
xshift=-3cm,scale=0.25]
\drawaxes
\end{scope}
\tdplotsetrotatedcoords{0}{\iFrame}{0}
\begin{scope}[color=red,tdplot_rotated_coords,scale=0.25]
\drawaxes
\end{scope}
\tdplotsetrotatedcoords{0}{0}{\iFrame}
\begin{scope}[color=red,
tdplot_rotated_coords,
xshift=3cm,scale=0.25]
\drawaxes
\end{scope}
\end{tikzpicture}
}
\end{animateinline}
\end{center}
\end{frame}
\end{document}
答案1
您陈述的问题是由于 Jeff Hein 在 tikz-3dplot 中采用的惯例造成的。
正如他所解释的那样,他选择了欧拉 zyz 约定(我猜这是天体物理学中使用最广泛的约定)。
语法:\tdplotsetrotatedcoords{α}{β}{γ}
参数:α 旋转框架绕世界 z 轴旋转的角度(以度为单位)。β 旋转框架绕世界 y 轴旋转的角度(以度为单位)。γ 旋转框架绕世界 z 轴旋转的角度(以度为单位)。
您想要围绕 z、y 和 x 轴进行旋转,通常称为航海角(或 Tait-Bryan、Cardan 或 zyx 欧拉角...)。
改变所用约定的一个好方法是重新定义 \tdplotsetrotatedcoords 使用的旋转矩阵,如tikz-3dplot 中的导航系统坐标。
答案2
如果其他人遇到同样的问题,这里有一个解决方法。使用\tdplotsetmaincoords{rotationX}{0}
,绘制旋转,然后切换回\tdplotsetmaincoords{0}{0}
正常绘制。例如,在我上面发布的代码中,替换
\tdplotsetrotatedcoords{0}{\iFrame}{0}
\begin{scope}[color=red,tdplot_rotated_coords,scale=0.25]
\drawaxes
\end{scope}
和
\tdplotsetmaincoords{\iFrame}{0}
\begin{scope}[color=red,tdplot_main_coords,scale=0.25]
\drawaxes
\end{scope}
\tdplotsetmaincoords{0}{0}
它可能不是最优雅的解决方案,但它似乎对我试图制作的动画起了作用。