Tikz 使用 foreach 绘制极坐标方程

Tikz 使用 foreach 绘制极坐标方程

我正在尝试使用 beamer 制作极坐标方程的动画,但我无法在这里或 Google 上找到与我的问题相关的任何内容,所以我的最后机会是寻求帮助。我尝试domain从方程中取出命令,以便绘图可以读取 x 变量值(范围从 0 到 20)。但是这根本不起作用……之后我尝试制作domain=\x但也没有用。有人对我的问题有任何解决方案(甚至提示)吗?

附言:我需要使用 Tikz 包。

提前致谢!

\documentclass{beamer}

    \usepackage{tikz}

    \begin{document}

        \foreach \x in {0,1,...,20}{
      \begin{frame}
        \begin{tikzpicture}
             \draw[align=center,color=orange,smooth] plot (canvas polar cs:angle=\x r,radius= {\x});
        \end{tikzpicture}
        \end{frame}
        }
    \end{document}

答案1

您需要将\foreach循环放在框架内,并使用\draw命令的叠加规范(这将在单个框架内产生多张幻灯片,然后为您提供动画效果);类似这样的内容:

\documentclass{beamer}
\usepackage{tikz}

\tikzset{
    invisible/.style={opacity=0,text opacity=0},
    visible on/.style={alt=#1{}{invisible}},
    alt/.code args={<#1>#2#3}{%
      \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}} 
    },
    beameralert/.style={alt=<#1>{fill=red!30,rounded corners,inner sep=1pt}{},anchor=base},
}

\begin{document}

\begin{frame}
\centering
\begin{tikzpicture}[scale=3]
\foreach \x in {0,...,10}
{
  \draw[
    color=orange,
    domain=0:\x,
    samples=200,
    visible on=<\number\numexpr\x+1\relax->
    ] 
    plot (canvas polar cs:angle=\x r,radius= {\x});
}
\end{tikzpicture}
\end{frame}

\end{document}

在此处输入图片描述

我使用了以下visible on样式(例如,这个答案) 来进行覆盖规范,以防止元素跳来跳去。

在上述解决方案中,每张幻灯片中都绘制了整个螺旋(“旧部分”和新部分),因此编译时间可能很长,计算量也会越来越大;为了防止这种情况,您可以使用

\documentclass{beamer}
\usepackage{tikz}

\tikzset{
    invisible/.style={opacity=0,text opacity=0},
    visible on/.style={alt=#1{}{invisible}},
    alt/.code args={<#1>#2#3}{%
      \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}} 
    },
    beameralert/.style={alt=<#1>{fill=red!30,rounded corners,inner sep=1pt}{},anchor=base},
}

\begin{document}

\begin{frame}
\centering
\begin{tikzpicture}[scale=3]
\xdef\lastx{0}
\foreach \x in {1,...,20}
{
  \draw[
    color=orange,
    domain=\lastx:\x,
    samples=200,
    visible on=<\number\numexpr\x+1\relax->
    ] 
    plot (canvas polar cs:angle=\x r,radius= {\x});
    \xdef\lastx{\x}
}
\end{tikzpicture}
\end{frame}

\end{document}

因此在每张新幻灯片中仅添加新部分。结果:

在此处输入图片描述

这是使用animate包;只有一些 pdf 查看器(通常是 Acrobat Reader)才能正确支持动画:

\documentclass{beamer}
\usepackage{tikz}
\usepackage{animate}
\usepackage{ifthen}
\hypersetup{pdfpagemode=FullScreen}

\newcounter{tmp}
\stepcounter{tmp}

\begin{document}

\begin{frame}[fragile]{}
\begin{center}
\begin{animateinline}[loop,poster=first,controls]{2}
\whiledo{\thetmp<21}{%
  \begin{tikzpicture}
    \begin{scope}[scale=2]
    \foreach \x in {1,...,\thetmp}
    {
      \draw[
        color=red,
        domain=0:\thetmp,
        samples=200,
        ] 
        plot (canvas polar cs:angle=\x r,radius= {\x});
    }
    \end{scope}  
    \path[use as bounding box] (-3,-3) rectangle (3,3);
  \end{tikzpicture}%
  \stepcounter{tmp}
  \ifthenelse{\thetmp<21}
    {\newframe}
    {\end{animateinline}\relax}
}
\end{center}
\end{frame}

\end{document}

相关内容