
Dies ist meine erste Figur, die ich versuche, sie in derProjektormit \foreach
.
Für einige von Ihnen sind es vielleicht nur fünf Minuten Arbeit, aber mich hat es den ganzen Morgen in Anspruch genommen.
Also meine Frage:Wie kann ich frame
für jedes Bild, das der \foreach
Operator erzeugt, separate Bilder erstellen? Das \newframe
Innere \foreach
funktioniert nicht.
Mein Zielwar, es in Bewegung zu setzen (gegen den Uhrzeigersinn rückwärts) ... aber nicht zwei Fragen miteinander zu verwickeln
\documentclass{beamer}%{book}
\usepackage[utf8x]{inputenc}
\usepackage{default}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetheme{Warsaw}
\usecolortheme{whale}
\begin{document}
%
\begin{frame}{rotating - test}
%
\begin{center}
\begin{tikzpicture}[scale=2]
\draw[thin,gray,step=0.25] (-1,-1) grid (1,1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\draw[->] (-1.5,0) -- (1.5,0) node[below]{$\phi_0$};
\draw[->] (0,-1.5) -- (0,1.5) node[left]{$x$};
\draw[thick] (0,0) circle [radius=1];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\coordinate (C1) at (1,0);
\coordinate (C2) at (0.86,0.5);
\coordinate (C3) at (0.7,0.7);
\coordinate (C4) at (0.5,0.86);
\coordinate (C5) at (0,1);
\coordinate (C6) at (-0.5,0.86);
\coordinate (C7)at(-0.7,0.7);
\coordinate (C8)at(-0.86,0.5);
\coordinate (C9) at (-1,0);
\coordinate (C10) at (-0.86,-0.5);
\coordinate (C11)at(-0.7,-0.7);
\coordinate (C12) at (-0.5,-0.86);
\coordinate (C13) at (0,-1);
\coordinate (C14) at (0.5,-0.86);
\coordinate (C15) at (0.7,-0.7);
\coordinate (C16) at (0.86,-0.5);
%
\foreach \Ctest in {(C1),(C2),(C3),(C4),(C5),(C6),
(C7),(C8),(C9),(C10),(C11),(C12),(C13),(C14),(C15),(C16)}{%
\draw [dashed] let \p1 = \Ctest
in
(\x1,\y1) -- (0,\y1)
(\x1,\y1) -- (0,0);
\draw [red,thick,->] let \p1 = \Ctest
in
(0,0) -- (0,\y1) node[left] {$x$};
\draw [red,thick] let \p1 = \Ctest,
\n1={atan2(\x1,\y1)}
in
(1,0) arc (0:\n1:1)
(0,0)--(0.251,0) arc (0:\n1:0.25)--cycle;
\draw[fill=red] \Ctest circle [radius=0.06];
% \newframe %<<================================================
};
\end{tikzpicture}
%
\end{center}
%
\end{frame}
\end{document}
1 Aktualisierung:Nach der Antwort von @Claudio Fiandrino und @Gonzalo Medina habe ich diese Figur. Das Problem ist jetzt, dass ich möchte, dass die „Umlaufbahn“ des roten Körpers einen kontinuierlich zunehmenden Bogen hat, aber der Winkel über 180 Grad nicht definiert ist
Antwort1
TikZ
und beamer
sind gut integriert; insbesondere sind TikZ-Befehle Overlay-fähig, so dass man beispielsweise sagen kann \draw<+-> ...
; in diesem speziellen Fall count=<macro>
kann die Syntax verwendet werden (wieCaludio Fiandrinoin seinem Kommentar vorgeschlagen), jede Position in der Schleife zu halten und dann <macro>
für die Overlay-Spezifikation zu verwenden:
Der ursprüngliche Code lässt sich deutlich vereinfachen, wenn man statt mit der Koordinatenzuweisung \Ctest
mit Winkeln arbeitet:
\documentclass{beamer}%{book}
\usepackage[utf8x]{inputenc}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetheme{Warsaw}
\usecolortheme{whale}
\begin{document}
\begin{frame}{rotating - test}
\begin{center}
\begin{tikzpicture}[scale=2]
\draw[thin,gray,step=0.25] (-1,-1) grid (1,1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\draw[->] (-1.5,0) -- (1.5,0) node[below]{$\phi_0$};
\draw[->] (0,-1.5) -- (0,1.5) node[left]{$x$};
\draw[thick] (0,0) circle [radius=1];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\foreach \Ctest[count=\i] in {0,30,45,60,90,120,135,150,180,210,225,240,270,300,315,330,360}{%
\draw<\i> [dashed]
(0,0) -- (\Ctest:1) -- (0,{sin(\Ctest)})
node[left,red] {$x$};
\draw<\i> [red,thick]
(0,0)--(0.251,0) arc (0:\Ctest:0.25) -- cycle;
\draw<\i> [->,red,thick]
(0,0) -- (0,{sin(\Ctest)});
\draw<\i>[fill=red] ({cos(\Ctest)},{sin(\Ctest)}) circle [radius=0.06];
}
\end{tikzpicture}
\end{center}
\end{frame}
\end{document}
Und mit dem Originalcode:
\documentclass{beamer}%{book}
\usepackage[utf8x]{inputenc}
%\usepackage{default}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetheme{Warsaw}
\usecolortheme{whale}
\begin{document}
%
\begin{frame}{rotating - test}
%
\begin{center}
\begin{tikzpicture}[scale=2]
\draw[thin,gray,step=0.25] (-1,-1) grid (1,1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\draw[->] (-1.5,0) -- (1.5,0) node[below]{$\phi_0$};
\draw[->] (0,-1.5) -- (0,1.5) node[left]{$x$};
\draw[thick] (0,0) circle [radius=1];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\coordinate (C1) at (1,0);
\coordinate (C2) at (0.86,0.5);
\coordinate (C3) at (0.7,0.7);
\coordinate (C4) at (0.5,0.86);
\coordinate (C5) at (0,1);
\coordinate (C6) at (-0.5,0.86);
\coordinate (C7)at(-0.7,0.7);
\coordinate (C8)at(-0.86,0.5);
\coordinate (C9) at (-1,0);
\coordinate (C10) at (-0.86,-0.5);
\coordinate (C11)at(-0.7,-0.7);
\coordinate (C12) at (-0.5,-0.86);
\coordinate (C13) at (0,-1);
\coordinate (C14) at (0.5,-0.86);
\coordinate (C15) at (0.7,-0.7);
\coordinate (C16) at (0.86,-0.5);
%
\foreach \Ctest[count=\i] in {(C1),(C2),(C3),(C4),(C5),(C6),
(C7),(C8),(C9),(C10),(C11),(C12),(C13),(C14),(C15),(C16)}{%
\draw<\i> [dashed] let \p1 = \Ctest
in
(\x1,\y1) -- (0,\y1)
(\x1,\y1) -- (0,0);
\draw<\i> [red,thick,->] let \p1 = \Ctest
in
(0,0) -- (0,\y1) node[left] {$x$};
\ifnum\i<9\relax
{\draw<\i> [red,thick] let \p1 = \Ctest,
\n1={atan2(\x1,\y1)}
in
(0,0)--(0.251,0) arc (0:\n1:0.25)--cycle;
}
\else
{
\draw<\i> [red,thick]
(0.25,0mm) arc (0:180:0.25);
\draw<\i> [red,thick] let \p1 = \Ctest,
\n1={atan2(-\x1,\y1)}
in
(0,0)--(-0.251,0) arc (0:-\n1:-0.25)--cycle;
}
\fi
\draw<\i>[fill=red] \Ctest circle [radius=0.06];
};
\end{tikzpicture}
%
\end{center}
%
\end{frame}
\end{document}