我正在尝试使用 tikz 生成动画。
动画应显示一个固定坐标系,位于当前页面上的任意位置 (x,y)。此外,还应动画一条旋转线,其旋转轴也位于位置 (x,y)。我写了以下代码
\documentclass{beamer}
\usepackage{tikz}
\usepackage{animate}
\usepackage{ifthen}
\begin{document}
\begin{frame}
\begin{tikzpicture}[remember picture, overlay, shift={(current page.center)}]
%draw coordinate system at the center of current page
\draw[thick, color=black, -latex] (-3,0) -- (3,0) node[right]{$x$};
\draw[thick, color=black, -latex] (0,-3) -- (0,3) node[above]{$y$};
\end{tikzpicture}
\begin{animateinline}[poster=first,controls]{8}%
% draw rotating line
\multiframe{11}{rt=0+0.1,icount=1+1}{%
\begin{tikzpicture}[scale=.75]
\ifthenelse{\icount > 0}%
{\draw[thick, color=red!50] ({0},{0}) -- ({cos(\rt)*5}, {sin(\rt)*5});}{}
\end{tikzpicture}%
}
\end{animateinline}
\end{frame}
\end{document}
动画没有达到我的期望。
- 如何将旋转轴移动到位置 (x,y)?
shift={(current page.center)}
不知何故不适用animateinline
- 线没有按照我希望的方式旋转(从水平位置开始并逆时针旋转)?
我很感激任何帮助!
PS:有谁知道怎样保存前几帧所画的线,使得第一帧只有一条线,第二帧有第一帧的线加上新画的线,然后分别用于后续帧?
答案1
拥有两个环境(一个用于轴,一个用于旋转图)有什么特殊原因吗?
如果您在相同的内部绘制轴,tikzpicture
则很容易获得所需的动画。
至于您的第二个问题,出现问题的原因在于动画过程中图像的大小发生了变化。您还使用了 0.1° 的步长,这个步长太小了,所以我增加了它。我在和处添加了两个“幻影节点”,(5,5)
以(-5,-5)
获得不动的动画。
我还删除了你的\ifthenelse
-condition,因为它没有任何效果,正如你写的那样。我还将缩放比例改为使用\resizebox
(我在创建 gif 时遇到了一些麻烦scale=.75
)
代码:
\documentclass{beamer}
\usepackage{tikz}
\usepackage{animate}
\begin{document}
\begin{frame}
\begin{animateinline}[poster=first,controls]{8}
% draw rotating line
\multiframe{36}{rt=0+10}{%
\resizebox{!}{.9\textheight}{\begin{tikzpicture}
\draw[thick, color=red!50] (0,0) -- ({cos(\rt)*5}, {sin(\rt)*5});
\draw[thick, color=black, -latex] (-3,0) -- (3,0) node[right]{$x$};
\draw[thick, color=black, -latex] (0,-3) -- (0,3) node[above]{$y$};
\node at (5,5) {};
\node at (-5,-5) {};
\end{tikzpicture}}%
}
\end{animateinline}
\end{frame}
\end{document}
结果: