
¿Cómo se dibuja un diagrama animado como este?
Esto es lo que podría obtener si hago mi mejor esfuerzo con el código:
\documentclass{standalone}
\usepackage{tikz,pgfplots}
\begin{document}
\begin{tikzpicture}[domain=0:13]
\draw[->] (-3,0) -- (13.2,0) node[right] {$x$};
\draw[->] (0,-1.2) -- (0,1.72) node[above] {$f(x)$};
\draw[color=blue] plot (\x,{sin(\x r)}) node[left] {$f(x) = \sin x$};
\draw (-2.,0.) circle (1cm);
\end{tikzpicture}
\end{document}
Respuesta1
¿Como esto?
\documentclass[tikz]{standalone}
\usepackage{tikz}
\begin{document}
\foreach \angle in {0,10,...,360}
{
\begin{tikzpicture}
% fill circle and plot
\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);
% draw connection
\draw (-2,0) +(\angle:1) circle (2pt) -- (pi/180*\angle,{sin(\angle)}) circle (2pt);
% draw axes an ticks
\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 and circle outline
\draw plot[smooth,domain=0:360] (pi/180*\x,{sin(\x)});
\draw (-2,0) circle (1);
\end{tikzpicture}
}
\end{document}
La conversión a un GIF animado se realizó usando
$ convert -density 300 -delay 8 -loop 0 -background white -alpha remove test.pdf test.gif
Respuesta2
No pude resistirme, así que aquí hay una solución que usa pgfplots
(y algo de tikz
), además arara
de crear la animación .gif.
Producción
Haga clic para tamaño más grande
Código
% arara: animate: {density: 160, delay: 8}
\documentclass[tikz]{standalone}
\usepackage{amsmath,amssymb}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}
\usepgfplotslibrary{fillbetween}
\begin{document}
\foreach \mainangle [count=\xx, evaluate=\mainangle as \mark using (\mainangle/45)] in {0,5,...,355,360}{
\begin{tikzpicture}
\begin{axis}[
set layers,
x=1.5cm,y=1.5cm,
xmin=-3.7, xmax=8.2,
ymin=-1.5, ymax=1.5,
axis lines=center,
axis on top,
xtick={2,4,6,8},
ytick={-1,-.5,.5,1},
xticklabels={$90^{\circ} (\pi/2)$, $180^{\circ} (\pi)$, $270^{\circ} (3\pi/2)$,$360^{\circ} (2\pi)$},
xticklabel style={font=\tiny},
yticklabels={-1,-0.5,0.5,1},
ylabel={$\sin(x)$}, y label style={anchor=west},
xlabel={$x$}, x label style={anchor=south},
]
\pgfonlayer{pre main}
\addplot [fill=white] coordinates {(-4,-2) (8.5,-2) (8.5,2) (-4,2)} \closedcycle;
\endpgfonlayer
\path[name path=xaxis] (axis cs:-4,0) -- (axis cs:8,0);
\coordinate (O) at (axis cs:0,0);
% plot and circle
\addplot [samples=100,domain=0:8, name path=myplot](\x,{3 * sin(\x*45)/pi});
\draw[name path=circle] (axis cs:-2.5,0) circle (1.5cm);
% fill in circle and plot
\draw[black,fill=blue!40] (axis cs:-2.5,0) -- (axis cs:-1.5,0) arc (0:\mainangle:1.5cm) coordinate (cc) -- cycle;
\path[name path=mark] (axis cs:\mark,-1) -- (axis cs:\mark,1);
% small circles
\draw (cc) circle (3pt);
\path[name intersections={of=mark and myplot,by=cp}];
\draw (cp) circle (3pt);
\draw (cc) -- (cp) -- (cp|-O);
\ifnum\mainangle<5
\else
\addplot[blue!30] fill between[of=xaxis and myplot, soft clip={domain=-1:\mark}];
\fi
\end{axis}
\end{tikzpicture}}
\end{document}
Respuesta3
He aquí sólo una propuesta:
\documentclass[border=5pt,tikz]{standalone}
\usetikzlibrary{arrows}
\tikzset{
io/.style={
draw,fill=white,circle,inner sep=1pt
}
}
\begin{document}
\foreach \n in {0,.1,...,6.28}
{
\begin{tikzpicture}[>=latex,samples=200]
\useasboundingbox (-2.5,-1.5) rectangle (7,1.5);
\draw[->] (0,0) -- (7,0) node[below=2] {$x$};
\draw[->] (0,-1.5) -- (0,1.5) node[scale=.7,right=2] {$\sin(x)$};
\draw[blue,domain=0:7] plot(\x,{sin(\x r)});
\pgfmathsetmacro\n{\n+.1}
% \pgfmathsetmacro\domain{\n-.25}
\foreach \a in {.1,.2,...,\n}
{
\pgfmathsetmacro\domain{\a-.1}
\draw[blue,fill=blue!20,fill opacity=.4,domain=\domain:\a] (\a,0) -- (\domain,0) -- (\domain,{sin(\domain r)}) plot(\x,{sin(\x r)}) --+ (0,{-sin(\a r)});
}
\draw (-1.5,0) circle(1);
\pgfmathsetmacro\angle{((\n)/(2*3.14))*360}
\draw[blue,fill=blue!20,fill opacity=.4] (-1.5,0) -- (-.5,0) arc(0:\angle:1) -- cycle;
\node[io] (a) at ({cos(\n r)-1.5},{sin(\n r)}) {};
% \pgfmathsetmacro\test{(\n/180)*7}
% \draw (a) -- (\test,{sin(\test r)}) node[io] {};
\draw (a) -- (\n,{sin(\n r)}) node[io] {};
\foreach \x in {1.57,3.14,...,6.28}
{
\pgfmathsetmacro\angle{int((\x/(2*3.14))*360)+1}
\draw (\x,.1) -- (\x,-.1) node[scale=.75,below=4] at (\x,0) {\pgfmathprintnumber\angle$^\circ$};
}
\foreach \y in {-1,-0.5,...,1}
{
\draw (.1,\y) -- (-.1,\y) node[scale=.5,left] {\y};
}
\end{tikzpicture}
}
\end{document}
Aquí está el resultado: