
これは私が初めて試したフィギュアですビーマーと\foreach
。
皆さんの中には、5 分間の作業で済む人もいるかもしれませんが、私にとっては、午前中のすべてを費やしました...
そこで私の質問は:frame
演算子から生成される各イメージを分離するにはどうすればよいですか\foreach
。\newframe
内部は\foreach
機能しません。
私の目標動きを持たせること(反時計回りに逆回転)でしたが、2つの質問を絡ませないでください
\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 更新:@Claudio Fiandrino と @Gonzalo Medina の回答を受けて、この図を作成しました。問題は、赤い物体の「軌道」に連続的に増加する円弧を持たせたいのですが、180 度を超える角度が定義されていないことです。
答え1
TikZ
はbeamer
よく統合されています。特に、TikZコマンドはオーバーレイに対応しているので、例えば次のように記述できます\draw<+-> ...
。この特定のケースでは、count=<macro>
構文は次のように使用できます(カルディオ・フィアンドリーノループ内の各位置を保持し、<macro>
オーバーレイ仕様に使用するには、彼のコメントで提案されている方法を使用します。
\Ctest
座標を割り当てる代わりに角度を扱うようにすれば、元のコードは非常に簡素化されます。
\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}
元のコードは次のとおりです。
\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}