我想创建一个卫星动画。我使用下面的代码。但是我希望它运行顺畅,所以我想生成许多帧。事实证明,我可以创建的最大帧数\foreach
是 45。如果我将其更改为 46,则会收到错误Dimension too large
。
那么,我怎样才能完成 45+ 个\foreach
循环?
\documentclass{beamer}
\usepackage{tikz}
\usepackage{pgfplots}
\setbeamertemplate{navigation symbols}{}
\begin{document}
\begin{frame}[fragile]
\frametitle{}
\begin{center}
\begin{tikzpicture}[scale=3.5]
\setbeamercovered{invisible}
\pgfmathsetmacro{\Jradius}{0.3} % Jupiter radius
\pgfmathsetmacro{\IoOrbit}{1} % Io radius
\pgfmathsetmacro{\Iradius}{0.1} % Earth radius
\fill[red] (0,0) circle (\Jradius);
\draw[thin] (0,0) circle (\IoOrbit);
\pgfmathsetmacro{\N}{45} %If 46 or more, then error.
\foreach \k in {0,1,...,\N}{
\pgfmathsetmacro{\theta}{360*\k/\N}
\pgfmathparse{int(\k+1)}
\onslide<\pgfmathresult>{
\fill[gray] ({cos(\theta)},{sin(\theta)}) circle (\Iradius);
}
}
\end{tikzpicture}
\end{center}
\end{frame}
\end{document}
答案1
在计算中\pgfmathsetmacro{\theta}{360*\k/\N}
360*\k
很容易变得比 LaTeX 可以处理的要大。反转乘法顺序,可以解决这个问题:
\pgfmathsetmacro{\theta}{360/\N*\k}