
Nachdem ich gegoogelt hatte, wie man eine Handlung animiert, fand ich verschiedene Möglichkeiten, die ich nicht verstand. Ich habe einige Animationen gemacht, bevor ich dies verwendet habeMethode. Meine Frage ist, ob es möglich ist, mit derselben Methode die folgende Handlung zu animieren?
(Ich brauche diese Animation in ein paar Tagen, daher kann ich keine anderen Methoden lernen)
\documentclass[tikz]{standalone}
\usetikzlibrary{animations}
\usepackage{animate}
\usepackage{ifthen}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{document}
\foreach \x in {0,1,...,20} {
\begin{tikzpicture}
\useasboundingbox (-3,-5) rectangle (9,10);
\begin{axis}[%title={test},
legend style={font=\fontsize{3}{3}\selectfont},
legend pos=south east,
axis lines=center,
domain=0.2:8,
xtick={0,1,...,7},
ytick={0,1,...,4},
samples=501,
xlabel={}]
\addplot [gray, dashed] {1};
\addplot [color=red] {1-exp(-\x)*cos(3*deg(\x))};
\end{axis}
\end{tikzpicture}
}
\end{document}
Antwort1
Für das vorliegende Problem muss die Obergrenze des Plotbereichs animiert werden.
\documentclass{standalone}
%\documentclass[dvisvgm]{standalone} % latex <file>.tex ; dvisvgm --font-format=woff2 --zoom=-1 --exact <file>.dvi
\usepackage[T1]{fontenc}
\usepackage{animate}
\usepackage{pgfplots}
\begin{document}
\begin{animateinline}[controls]{20}
\multiframe{81}{rXmax=0+0.1}{
\begin{tikzpicture}
\begin{axis}[
axis lines=center,
domain=0.001:\rXmax,
xtick={0,1,...,8},
xmax=8.4,
ymax=1.6,
samples=501
]
\addplot [gray, dashed] {1};
\addplot [color=red] {1-exp(-x)*cos(3*deg(x))};
\end{axis}
\end{tikzpicture}
}
\end{animateinline}
\end{document}
Antwort2
Meine Lösung verwendengnuplot
und muss (nur beim ersten Mal, um die Tabelle der Kurvenpunkte zu erhalten) mit kompiliert werden pdflatex.exe -shell-escape %.tex
.
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\usetikzlibrary{math,backgrounds}
\begin{document}
\foreach \xDom in {0.2,0.3,...,7.2} {
\begin{tikzpicture}[background rectangle/.style={fill=white},show background rectangle]
\tikzmath{
\samplePoints= int(\xDom*100);
\idFile= int(\xDom*10);
}
\begin{axis}[%title={test},
legend style={font=\fontsize{3}{3}\selectfont},
legend pos=south east,
axis lines=center,
domain=0.2:\xDom,
xmin=0.2,xmax=7.5,
ymin={1-exp(-0.2)*cos(3*deg(0.2))},
ymax=1.5,
xtick={0,1,...,7},
ytick={0,1,...,4},
samples=\samplePoints,
xlabel={}]
\draw[gray, dashed] (axis cs:0,1) -- (axis cs:7.2,1);
\addplot [color=red] gnuplot[id=gr\idFile] {1-exp(-x)*cos(3*x)};
\end{axis}
\end{tikzpicture}
}
\end{document}
Wie man sehen kann, habe ich dem Tikz-Bild einen Hintergrund hinzugefügt, da ich festgestellt habe, dass die Konvertierung in GIF auf diese Weise viel besser ist (weniger Aliasing). Nach der Kompilierung des LaTeX-Codes müssen Sie das mehrseitige PDF mit in GIF konvertieren ImageMagick
. Ich verwende die folgende Anweisung in der Befehlszeile:
magick convert -verbose -density 300 -strip -resize 50% -layers OptimizePlus -delay 30 *.pdf myGIF.gif
Wenn Sie kein Windows verwenden, lassen Sie die erstemagick
Das Ergebnis ist:
Bearbeiten:
Wie AlexG sagt, ist der Hintergrund nicht notwendig, Sie können die Flagge -alpha remove
in verwenden convert
. Daher lautet ein verbesserter Code (mit einigen anderen Änderungen):
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\usetikzlibrary{math}
\begin{document}
\foreach \xDom [count=\idFile] in {0.2,0.21,...,7.2} {
\begin{tikzpicture}
\tikzmath{
\samplePoints= ifthenelse(\xDom==0.2, 1, int(\xDom*100));
}
\begin{axis}[%title={test},
legend style={font=\fontsize{3}{3}\selectfont},
legend pos=south east,
axis lines=center,
domain=0.2:\xDom,
xmin=0.2,xmax=7.5,
ymin={1-exp(-0.2)*cos(3*deg(0.2))},
ymax=1.5,
xtick={0,1,...,7},
ytick={0,1,...,4},
samples=\samplePoints,
xlabel={}]
\draw[gray, dashed] (axis cs:0,1) -- (axis cs:7.2,1);
\addplot [color=red] gnuplot[id=gr\idFile] {1-exp(-x)*cos(3*x)};
\end{axis}
\end{tikzpicture}
}
\end{document}
Wie zuvor muss dies kompiliert werden, pdflatex.exe -shell-escape %.tex
um das mehrseitige PDF zu erhalten, und dann mit:
magick convert -verbose -density 300 -strip -resize 40% -alpha remove -layers OptimizePlus -delay 1 *.pdf myGif.gif
Und das Ergebnis ist: