其他
TikZ + animate 配合制作基础函数动画
与 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}
获取下载文件