查看原文
其他

TikZ + animate 配合制作基础函数动画

LaTeX工作室 2024-03-21

与 TikZ 配合制作动画,可以使用 animate 宏包。animate 宏包可以用于生成 JavaScript 动画,而 TikZ 可以用于生成矢量图形。

要使用 animate 宏包与 TikZ 配合制作动画,需要先在导言区中引入 animate 宏包和 TikZ 宏包:

\usepackage{animate}
\usepackage{tikz}

然后,可以使用 animate 命令来创建动画。animate 命令的参数说明如下:

  • file:动画的文件名。
  • start:动画的起始帧。
  • end:动画的结束帧。
  • delay:帧之间的延迟时间(以毫秒为单位)。

例如,以下命令将创建一个包含 10 帧的动画,每帧延迟 100 毫秒:

\animategraphics[delay=100]{image.pdf}{1}{10}

要使用 TikZ 在动画中生成矢量图形,需要在 animate 命令中指定图形的参数。例如,以下命令将在动画的第一帧中绘制一个红色的圆形,在第二帧中绘制一个绿色的圆形,在第三帧中绘制一个蓝色的圆形:

\animategraphics[delay=100]{image.pdf}{1}{3}{
{
\draw[red,circle] (0,0) circle (1cm);
},
{
\draw[green,circle] (0,0) circle (1cm);
},
{
\draw[blue,circle] (0,0) circle (1cm);
}
}

animate 宏包提供了许多选项来控制动画的效果。这些选项可以在 animate 命令中指定,也可以在宏包的选项中指定。

以下是一些常用的选项:

  • autoplay:动画是否自动播放。
  • loop:动画是否循环播放。
  • controls:是否显示控制按钮。
  • posterframe:动画的预览帧。

例如,以下命令将创建一个自动播放、循环播放、显示控制按钮的动画,并将起始帧设置为 5:

\animategraphics[autoplay,loop,controls]{image.pdf}{5}{10}

以下是一些使用 animate 宏包与 TikZ 配合制作动画的示例:

  • 物体运动:可以使用 TikZ 绘制物体,并使用 animate 宏包控制物体的运动。例如,可以绘制一个球,并使用 animate 宏包控制球的移动。
  • 形状变化:可以使用 TikZ 绘制形状,并使用 animate 宏包控制形状的变化。例如,可以绘制一个矩形,并使用 animate 宏包控制矩形的大小变化。
  • 文字动画:可以使用 TikZ 绘制文字,并使用 animate 宏包控制文字的动画效果。例如,可以绘制一个字幕,并使用 animate 宏包控制字幕的滚动效果。

animate 宏包可以用于创建各种类型的动画,可以帮助您在 LaTeX 文档中创建生动有趣的动画。

下面代码是生成不同函数的动图演示,有需要的可以下载观瞻观瞻。

sin函数的动图

\documentclass{beamer}
\usepackage{tikz}\usepackage{animate}\usetikzlibrary{math, calc}
\begin{document} \huge \begin{center} Função Seno \end{center}
\normalsize \begin{animateinline}[poster=31, controls={play,step,stop}]{24} \multiframe{361}{rtheta=0+1} { \begin{tikzpicture} \path[use as bounding box] (-3.5,-2) rectangle (7.2,2); \draw[rounded corners] (-3.5,-2) rectangle (7.2,2);
\tikzmath{ function degreeToRad(\d){ return {pi}*\d/180; }; } \draw[->,>=latex,thick] (-0.3,0) -- (7,0)node[below]{\(x\)}; \draw[->,>=latex,thick] (0,-1.5) -- (0,1.5)node[left]{\(y\)}; \draw[ultra thick, blue, samples=50, domain=0:{2*pi}] plot (\x, {sin(\x r)});
\node at (0,0) [below left]{\(O\)}; \node at ({pi/2},0) [below]{\(\frac{\pi}{2}\)}; \node at ({pi},0) [below]{\(\pi\)}; \node at ({3*pi/2},0) [below]{\(\frac{3\pi}{2}\)}; \node at ({2*pi},0) [below]{\(2\pi\)}; \draw (-2,0) circle (1cm); \draw[->,>=latex,thick] (-3.5,0) -- (-0.5,0); \draw[->,>=latex,thick] (-2,-1.5) -- (-2,1.5); \coordinate (A) at (-2,0); \coordinate (B) at (-2,1); \coordinate (C) at (-2,-1); \coordinate (D) at (-3,0); \coordinate (E) at (-1,0); \coordinate[rotate around={\rtheta:(A)}] (P) at ($(A) + (1,0)$); \draw[thick] (A) -- (P); \draw[thin, dashed, blue] ($(D)!(P)!(E)$) -- (P) -- ($(B)!(P)!(C)$); \draw[->, >=stealth] (-1.6,0) arc [start angle=0, end angle=\rtheta, radius=0.4]; \draw[ultra thick, blue] (-2, 0) -- (-2, {sin(\rtheta)}); \draw[thin, blue, dashed] (P) -- ({degreeToRad(\rtheta)}, {sin(\rtheta)}) -- ({degreeToRad(\rtheta)},0); \draw[fill=black] ({degreeToRad(\rtheta)}, {sin(\rtheta)}) circle (1pt); \end{tikzpicture} } \end{animateinline}\end{document}

cos 函数的动图:

\documentclass{beamer}\usepackage{tikz}\usepackage{animate}\usetikzlibrary{math, calc}
\begin{document} \huge \begin{center} Função Cosseno \end{center}
\normalsize \begin{animateinline}[poster=31, controls={play,step,stop}]{24} \multiframe{361}{rtheta=0+1} { \begin{tikzpicture}[scale=1] \path[use as bounding box] (-3.5,-2) rectangle (7.2,2); \draw[rounded corners] (-3.5,-2) rectangle (7.2,2);
\tikzmath{ function degreeToRad(\d){ return {pi}*\d/180; }; } \draw[->,>=latex,thick] (-0.3,0) -- (7,0)node[below]{\(x\)}; \draw[->,>=latex,thick] (0,-1.5) -- (0,1.5)node[left]{\(y\)}; \draw[ultra thick, red, samples=50, domain=0:{2*pi}] plot (\x, {cos(\x r)});
\node at (0,0) [below left]{\(O\)}; \node at ({pi/2},0) [below]{\(\frac{\pi}{2}\)}; \node at ({pi},0) [below]{\(\pi\)}; \node at ({3*pi/2},0) [below]{\(\frac{3\pi}{2}\)}; \node at ({2*pi},0) [below]{\(2\pi\)}; \draw[thin, dashed] ({2*pi}, 0) -- ({2*pi},1); \draw (-2,0) circle (1cm); \draw[->,>=latex,thick] (-3.5,0) -- (-0.5,0); \draw[->,>=latex,thick] (-2,-1.5) -- (-2,1.5); \coordinate (A) at (-2,0); \coordinate (B) at (-2,1); \coordinate (C) at (-2,-1); \coordinate (D) at (-3,0); \coordinate (E) at (-1,0); \coordinate (P) at ($(A) + (\rtheta:1)$); \draw[thick] (A) -- (P); \draw[thin, dashed, red] ($(D)!(P)!(E)$) -- (P) -- ($(B)!(P)!(C)$); \draw[->, >=stealth] (-1.6,0) arc [start angle=0, end angle=\rtheta, radius=0.4]; \coordinate (Q) at ($(A) + ({cos(\rtheta)},0)$); \coordinate (R) at ($({-2+cos(\rtheta)}, {cos(\rtheta)})$); \draw[ultra thick, red] (A) -- (Q) -- (R); \draw[thin, red] (Q) circle [radius={abs(cos(\rtheta))}]; \draw[thin, red, dashed] (R) -- ({degreeToRad(\rtheta)}, {cos(\rtheta)}) -- ({degreeToRad(\rtheta)},0); \draw[fill=black] ({degreeToRad(\rtheta)}, {cos(\rtheta)}) circle (1pt); \end{tikzpicture} } \end{animateinline}\end{document}


抛物线的演示动图:

\documentclass{beamer}
\usepackage{tikz}\usepackage{animate}
\begin{document} \begin{center} \begin{animateinline}[poster=0, controls={play,step,stop}]{10} \multiframe{51}{ri=0+0.04} { \begin{tikzpicture} \path[use as bounding box] (-2,-1) rectangle (5.5,5.5); \draw[->,>=latex, thick] (-2,0) -- (5,0) node[below]{\(x\)}; \draw[->,>=latex, thick] (0,-2) -- (0,5) node[left]{\(y\)}; \draw[ultra thick, blue, samples=200, domain=\ri+2:\ri-2] plot (\x, {(\x-\ri)^2}) node[right]{$f\left(x\right)=\left(x-\ri \right)^2$}; \node at (\ri, 0)[below] {$\ri$}; \node at (0, 0)[below left] {$O$}; \end{tikzpicture} } \newframe \multiframe{26}{ri=0+0.04} { \begin{tikzpicture} \path[use as bounding box] (-2,-1) rectangle (5.5,5.5); \draw[->,>=latex, thick] (-2,0) -- (5,0) node[below]{\(x\)}; \draw[->,>=latex, thick] (0,-2) -- (0,5) node[left]{\(y\)}; \draw[ultra thick, blue, samples=200, domain=4:0] plot (\x, {(\x-2)^2+\ri}) node[right]{$f\left(x\right)=\left(x-2 \right)^2+\ri $}; \node at (0, 0)[below left] {$O$}; \node at (2, 0)[below] {$2$}; \draw[dashed] (2,0)--(2,\ri)--(0,\ri)node[left]{$\ri$}; \end{tikzpicture} } \newframe \multiframe{31}{ri=1+0.1} { \begin{tikzpicture} \path[use as bounding box] (-2,-1) rectangle (5.5,5.5); \draw[->,>=latex, thick] (-2,0) -- (5,0) node[below]{\(x\)}; \draw[->,>=latex, thick] (0,-2) -- (0,5) node[left]{\(y\)}; \draw[ultra thick, blue, samples=200, domain=4:0] plot (\x, {\ri*(\x-2)^2+1}); \node at (0,5) [right, blue] {$f\left(x\right)=\ri \left(x-2 \right)^2+1$}; \node at (0, 0)[below left] {$O$}; \node at (2, 0)[below] {$2$}; \draw[dashed] (2,0)--(2,1)--(0,1)node[left]{$1$}; \end{tikzpicture} } \end{animateinline} \end{center}\end{document}

\documentclass{article}
\usepackage{tikz}\usepackage{animate}\usepackage{ifthen}\usepackage{amsmath}\usetikzlibrary{math}
\begin{document} \begin{center} \begin{animateinline}[poster=1, controls={play,step,stop}]{5} \multiframe{29}{ri=0+0.05} { \begin{tikzpicture}[ scale=2.5, extended line/.style={shorten >=-#1,shorten <=-#1}, extended line/.default=1cm] \path[use as bounding box] (-1,-1) rectangle (3.5,3);
\tikzmath{ function calcF(\x){ return 1+(2*\x-\x^2)*ln(\x); }; } \draw[->,>=latex, thick] (-.5,0) -- (3,0) node[below]{\(x\)}; \draw[->,>=latex, thick] (0,-.5) -- (0,1.8) node[left]{\(y\)}; \draw[ultra thick, blue, samples=200, domain=0.0001:2.6] plot (\x, {1+(2*\x-\x^2)*ln(\x)}) node[right]{\(f\)}; \draw[orange, thick] (0.5,0.5) -- (1.5,1.5) node[above]{\(t\)}; \draw[thin, dashed] (1,{calcF(1)}) -- (1,0) node[below]{\(a\)}; \draw[thin, dashed] (1,{calcF(1)}) -- (0,{calcF(1)}) node[left]{\(f\left(a\right)\)};
\ifthenelse{\equal{\ri}{1.4}}{}{ \draw[red,thick,extended line] (1,{calcF(1)}) -- ({2.4-\ri}, {calcF(2.4-\ri)}); \draw[thin, dashed] ({2.4-\ri}, {calcF(2.4-\ri)}) -- (2.4-\ri, 0) node[below]{\(a+h\)}; \draw[thin, dashed] (2.4-\ri,{calcF(2.4-\ri)}) -- (0, {calcF(2.4-\ri)}) node[left]{\(f\left(a+h\right)\)}; \draw[<->, >=latex] (1,-0.3) -- (2.4-\ri,-0.3); \node at ({1+0.5*(1.4-\ri)},-0.3) [below]{\(h\)}; } \draw[color=blue, fill=white] (0,{calcF(0.0001)}) circle(1pt); \node at (0,0) [below left]{\(O\)}; \node at (1.5,1.8) [above]{\(f'\left(a\right)=\underset{h\to0}{\lim}\dfrac{f\left(a+h\right)-f\left(a\right)}{h}\)}; \end{tikzpicture} } \end{animateinline} \end{center}\end{document}
点击阅读原文

获取下载文件



继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存