如何制作动画来展示电流如何流动?

如何制作动画来展示电流如何流动?

我有一个电路,我想显示电流在这个电路中如何移动,我使用这个代码:

\documentclass[tikz]{standalone}

\usepackage{tikz}
\usepackage{animate}
\usepackage{circuitikz}

\begin{document}
\begin{animateinline}[auto play]{1}
 \multiframe{2}{i=0+0.2}{
 \begin{circuitikz}
      \draw (0,0)
      to[V,v=$U_q$] (0,2) % The voltage source
      to[short] (2,2)
      to[R=$R_1$] (2,0) % The resistor
      to[short] (0,0);
      \draw (2,2)
      to[short] (4,2)
      to[R=$R_2$] (4,0)
      to[short] (2,0); 
      \draw (0,0)
      to[thick,color=red, -*] (0,\i) % The voltage source
      to[thick,color=red, -*] (\i,2)
      to[thick,color=red, -*] (2,{2-\i}) % The resistor
      to[thick,color=red, -*] ({2-\i},0);
      \draw (2,2)
      to[thick,color=red, -*] ({2+\i},2)
      to[thick,color=red, -*] ({2+\i},0)
      to[thick,color=red, -*] ({4-\i},0);
   \end{circuitikz}}
\end{animateinline}
\end{document}

在这个动画中,我将解释欧姆定律,并展示电流如何在导体中移动并通过电阻器减速

更新 我修改了代码,运行良好,但我需要显示电流如何通过电阻器减慢,有人可以帮我完成这个代码吗?

\documentclass[border=30pt, tikz]{standalone}
    \usepackage{tikz,tikz-3dplot}
    \usepackage{xparse}
    \usepackage{animate, calc}%%%%%%%%%%%%
    \usepackage{animate}
    \usepackage{circuitikz}

    \ExplSyntaxOn
    \NewDocumentCommand { \xifnum } { }
        {
            \fp_compare:nTF
        }
    \ExplSyntaxOff

    \begin{document}
     \foreach \x in {0.1,0.2,...,4}{
     \begin{tikzpicture}
       \begin{circuitikz}
         \draw (0,0)
          to[V,v=$U_q$] (0,2) % The voltage source
          to[short] (2,2)
          to[R=$R_1$] (2,0) % The resistor
          to[short] (0,0);
          \draw (2,2)
          to[short] (4,2)
          to[R=$R_2$] (4,0)
          to[short] (2,0); 
          \xifnum{\x<2}{\fill[color=red] (0,\x) circle (3pt);}{\fill[color=red] ({\x-2},2) circle (3pt);}
     \end{circuitikz}
     \end{tikzpicture}
    }
    \end{document}

答案1

我已经整理了你的代码,并以不同的速度通过 R1 继续动画。我已经不是使用动画包,因为看起来我的 pdf 查看器(evince)无法显示这些动画。

我使用相对坐标(++)以获得更好的可维护性,我使用命名坐标以获得更好的可读性,我已经定义了一个环境和一个命令以避免代码重复,我已经定义了三个命令以便于定制,并且我已经将 for 循环分成几个循环因为我认为这样更容易。

\stepconductor您可以通过更改和来自定义速度\stepresistor。建议选择 1 为它们的倍数。

您可以通过更改来自定义红点的大小\currentradius

\documentclass[border=30pt, tikz]{standalone}
\usepackage{circuitikz}


\newcommand{\stepconductor}{.1}
\newcommand{\stepresistor}{.025}

\newcommand{\currentradius}{3pt}


\newenvironment{mycircuit}{%
    \begin{circuitikz}
        \draw (0,0) coordinate (V-)
            to[V,v=$U_q$] ++(0, 2) coordinate (V+)
            to[short]     ++(2, 0) coordinate (R1+)
            to[R=$R_1$]   ++(0,-2) coordinate (R1-)
            to[short]     (V-);
        \draw (R1+)
            to[short]     ++(2, 0) coordinate (R2+)
            to[R=$R_2$]   ++(0,-2) coordinate (R2-)
            to[short]     (R1-);

        % ensure that tikzpicture has always the same size (independent of the position of the current)
        \path (V+) -- ++(0, +\currentradius);
        \path (V-) -- ++(0, -\currentradius);
}{%
    \end{circuitikz}%
}
\newcommand{\current}[2]{%
    \path (#1) -- node[pos=\p, circle, fill=red, minimum size=2*\currentradius, inner sep=0pt]{} (#2);
}

\begin{document}
    \foreach \p in {0, \stepconductor, ..., 1}{
        \begin{mycircuit}
            \current{V-}{V+}
        \end{mycircuit}
    }
    \foreach \p in {0, \stepconductor, ..., 1}{
        \begin{mycircuit}
            \current{V+}{R1+}
        \end{mycircuit}
    }
    \foreach \p in {0, \stepresistor, ..., 1}{
        \begin{mycircuit}
            \current{R1+}{R1-}
        \end{mycircuit}
    }
    \foreach \p in {0, \stepconductor, ..., 1}{
        \begin{mycircuit}
            \current{R1-}{V-}
        \end{mycircuit}
    }
\end{document}

在此处输入图片描述

我使用以下命令将 pdf 转换为 gif(感谢亨利·孟克):

convert -density 300 -delay 8 -loop 0 -background white -alpha remove main.pdf main.gif

相关内容