
Ich versuche, die hier gezeigte Animation zu ändernBeispiel: Sinus- und Cosinusfunktionen-Animationeinzuschließen phase
, so dass die Drehung jedes Mal in einem anderen Winkel beginnt, d. h. phase =[0, 45 ,-45]
, ich habe foreach wie unten verwendet. Die Originalanimation wird in angezeigtBeispiel: Sinus- und Cosinusfunktionen-Animation, aber der Code funktionierte nicht(Bitte heben Sie die Kommentarzeichen aus den entsprechenden Befehlen zur Animation auf, um den Fehler zu überprüfen, den ich erhalte.).
\documentclass[tikz]{standalone}
\usepackage{tikz}
\begin{document}
%\newcounter{theangle}
%\setcounter{theangle}{0}
\begin{tikzpicture}
\def\angle{45};
\fill[fill=red] (0,0) -- plot [domain=0:pi/180*\angle] (\x,{sin(\x r)}) -- (pi/180*\angle,0) -- cycle;
\end{tikzpicture}
%\begin{animateinline}[loop, poster = first,controls]{40}
%
%\foreach \angle in {0,45,-45}
%\whiledo{\angle<359}{
\foreach \angle in {0,10,...,360}
{
\begin{tikzpicture}
%\fill[blue!50] (-1,0) arc (0:\angle:1) -- (-2,0) -- cycle;
%\fill[blue!50] plot[smooth,domain=0:\angle] (pi/180*\x,{sin(\x)}) |- (0,0);
\def\radangle{pi/180*\angle};
\fill[blue!50] (-1,0) arc (0:\angle:1) -- (-2,0) -- cycle;
%\fill[fill=red] (0,0) -- plot [domain=0:\radangle] (\x,{sin(\x r)}) -- (\radangle,0) -- cycle;
\draw (-2,0) +(\angle:1) circle (2pt) -- (pi/180*\angle,{sin(\angle)}) circle (2pt);
\draw (-3.5,0) -- (7,0);
\foreach \deg in {90, 180, 270, 360}
\draw (pi/180*\deg,2pt) -- (pi/180*\deg,-2pt) node[below] {$\deg^\circ$};
\draw (0,-1.2) -- (0,1.2);
\foreach \y in {-1,-0.5,0.5,1}
\draw (2pt,\y) -- (-2pt,\y) node[left] {$\y$};
\draw plot[smooth,domain=0:360] (pi/180*\x,{sin(\x)});
\draw (-2,0) circle (1);
\end{tikzpicture}
%
% \stepcounter{theangle}
% \ifthenelse{\theangle<359}{\newframe}{
% \end{animateinline}}
}
\end{document}
Antwort1
Das Beispiel verwendet \clist_map_inline:nn
aus LaTeX3 statt aus TikZ, \foreach
um über die kommagetrennte Liste der Phasenverschiebungen zu iterieren. Aus irgendeinem Grund \foreach
funktioniert es innerhalb von nicht animateinline
.
An geeigneten Stellen der Animation sind einige Pausen ( \newframe*
) eingefügt; klicken Sie auf den Play-Button oder das Animations-Widget, um fortzufahren:
(Zum Anzeigen der SVG-Version wird ein Chromium-basierter Browser empfohlen, da Firefox etwas langsam ist.)
\documentclass{standalone}
\usepackage[T1]{fontenc}
\usepackage{tikz,animate}
\ExplSyntaxOn
\let\clistMap\clist_map_inline:nn
\ExplSyntaxOff
\newcommand{\drawit}[2]{% #1 angle (0<=#1<=360)
\begin{tikzpicture} % #2 phase shift
\pgfmathsetmacro\angleRad{pi/180*(#1+#2)}
\pgfmathsetmacro\angleDeg{#1+#2}
\pgfmathsetmacro\unshiftedRad{pi/180*(#1)}
\fill[blue!50] (-2,0) -- ++(#2:1) arc (#2:\angleDeg:1) -- cycle;
\draw (-2,0) +(\angleDeg:1) circle (2pt) -- (\unshiftedRad,{sin(\angleDeg)}) circle (2pt);
\draw (-3.5,0) -- (7,0);
\foreach \deg in {90, 180, 270, 360}
\draw (pi/180*\deg,2pt) -- (pi/180*\deg,-2pt) node[below] {$\deg^\circ$};
\draw (0,-1.2) -- (0,1.2);
\foreach \y in {-1,-0.5,0.5,1}
\draw (2pt,\y) -- (-2pt,\y) node[left] {$\y$};
\draw plot[smooth,domain=0:360] (pi/180*\x,{sin(\x+#2)});
\draw (-2,0) circle (1);
\node [anchor=north east] at (current bounding box.north east) {$\varphi=#2^\circ$};
\end{tikzpicture}%
}
\begin{document}
\begin{animateinline}[controls]{30}
\clistMap{0,45,-45}{%
\drawit{0}{#1}
\newframe*
\multiframe{360}{i=1+1}{\drawit{\i}{#1}}%
\ifthenelse{#1=-45}{}{\newframe*}%
}
\end{animateinline}
\end{document}