# The relationship between circular motion and simple harmonic motion in LaTeX

You seem to have very old students, who know how these record players looked like.

\documentclass[tikz,border=3mm]{standalone}
\usepackage{tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{70}{30}
\foreach \Angle in {180,185,...,360}
{\begin{tikzpicture}[tdplot_main_coords,line cap=round,line join=round,
pics/cyl/.style={code={
\draw[left color=orange,right color=orange!20] (\tdplotmainphi:0.2) arc[start angle=\tdplotmainphi,
-- ($(\tdplotmainphi-180:0.2)+(0,0,1)$)
arc[start angle=\tdplotmainphi-180,
}},pics/projected cyl/.style={code={
\draw[gray,fill=gray!20] (-0.2,0) rectangle (0.2,1);
}}]
\begin{scope}[canvas is xz plane at y=5.5]
\fill[gray] (-6,0) rectangle (6,-2);
\fill[gray!10] (-6,0) rectangle (6,2);
\path ({4*cos(\Angle)},0) pic[transform shape]{projected cyl};
\end{scope}
\begin{scope}[canvas is xy plane at z=0]
lower left=gray!50,lower right=black,even odd rule] circle[radius=5]
\draw foreach \r in {2.1,2.2,...,4.9} {circle[radius=\r]};
\end{scope}
\path (\Angle:4) pic{cyl};
\end{tikzpicture}}
\end{document} P.S. I first did not understand what was meant by "details" but after starring long enough on the screen shot I, too, could see a duck (even though I am still not sure if it is really there).

\documentclass[tikz,border=3mm]{standalone}
\usepackage{tikz-3dplot}
\usepackage{tikzducks}
\begin{document}
\tdplotsetmaincoords{70}{30}
\foreach \Angle in {5,15,...,355}
{\begin{tikzpicture}[tdplot_main_coords,line cap=round,line join=round,
pics/cyl/.style={code={
\draw[left color=orange,right color=orange!80,middle color=orange!10]
(\tdplotmainphi:0.2) arc[start angle=\tdplotmainphi,
-- ($(\tdplotmainphi-180:0.2)+(0,0,1)$)
arc[start angle=\tdplotmainphi-180,
}},pics/projected cyl/.style={code={
\draw[gray,fill=gray!20] (-0.2,0) rectangle (0.2,1);
}}]
\begin{scope}[canvas is xz plane at y=5.5]
\fill[gray] (-6,0) rectangle (6,-2);
\fill[gray!10] (-6,0) rectangle (6,2);
\draw[thick,-Stealth] (-6,3) -- (6,3);
\draw[transform shape] (-4,2.8) -- ++ (0,0.4) node[above]{$x=-A$}
(0,2.8) -- ++ (0,0.4) node[above]{$x=0$}
(4,2.8) -- ++ (0,0.4) node[above]{$x=A$};
\path ({4*cos(\Angle)},0) pic[transform shape]{projected cyl};
\end{scope}
\begin{scope}[canvas is xy plane at z=0]
lower left=gray!50,lower right=black,even odd rule] circle[radius=5]
\draw foreach \r in {2.1,2.2,...,4.9} {circle[radius=\r]};
\path[nodes={transform shape,anchor=base,font={\large\sffamily},text=white}]
foreach \Char [count=\Z,
evaluate=\Z as \myangle using {\tdplotmainphi+\Angle+\Z*8+(\Z==1?-4:0)}]
in {M,o,z,a,r,t}
{(\myangle:1.5) node[rotate=\myangle+90]{\Char}};
\duck[rotate=\Angle,xshift=-1cm,yshift=-1cm]
\pgflowlevelsynccm
\draw[very thick,blue,-{Stealth[bend]}]
\end{scope}
\path (\Angle:4) pic{cyl};
\end{tikzpicture}}
\end{document} P.S. Somehow it is not entirely trivial to use decorations.text together with projections on a plane.

If you only need the GIF, is LaTeX necessarily required? If you consider another alternative and my answer isn't considered as spam, there's a ConTeXt example (compile it here when an installation isn't feasible in your case). Unfortunately no fancy 3D:

\starttext
%#1: start; #2: end; #3: step; #4: content
\dostepwiserecurse{0}{330}{30}{%
\startMPpage
labeloffset := 5bp;
numeric u;  u := 1cm;
numeric alpha; alpha := \recurselevel;
path stick;
stick := fullsquare xscaled 0.2u yscaled 2.2u shifted (1.5u*right);
peg := u*dir alpha;
fill fullsquare scaled 2.2u withcolor .75[blue,white];
fill stick withcolor 0.75;
fill fullcircle scaled 2u;
fill fullcircle scaled 1/2u withcolor darkblue;
for i = 1/2 step 1/4 until 2:
draw fullcircle scaled (i*u) withcolor 0.25;
endfor
fill fullcircle scaled 1/8u withcolor (1,4/5,0);
%Comment the next line if you don't want a dashed line connecting the peg and its shadow
draw peg -- lilshadow dashed evenly withcolor (1,1,0);
drawdot lilshadow withpen pencircle scaled 4 withcolor 0.4;
drawdot peg withpen pencircle scaled 4 withcolor (1,1/2,0);
drawarrow (urcorner stick -- lrcorner stick) shifted (3bp*right);
label.rt("$\tfxx x=-A$", urcorner stick);
label.rt("$\tfxx x=+A$", lrcorner stick);
label.rt("$\tfxx x=0$", 1/2[urcorner stick, lrcorner stick]);
setbounds currentpicture to (fullsquare xscaled 4u yscaled 2.5u shifted (0.75u*right));
\stopMPpage%
}
\stoptext


I've chosen simple colors, but additional tuning is up to your taste. Using the following in the command line (my file is 104.pdf in the example):

convert -density 200 104.pdf 104-%02d.png
convert -delay 15 -dispose 2 104-*.png 104.gif


I finally get this GIF: EDIT: As pointed out above, changing the step as well as the ending point we have a GIF which moves faster or slower. If we use

\dostepwiserecurse{0}{345}{15}{%


instead, and with the same settings for convert, we get this: A PSTricks solution only for either fun or comparison purposes.

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node}
\begin{document}
\foreach \i in{0,10,...,350}{%
\begin{pspicture}(-5,-5)(6.5,5)
\pscircle(0,0){4}
\psline(5,-5)(5,5)
\pnodes(4;\i){P}(!5 4 \i\space sin mul){Q}(5,-4){B}(5,0){O}(5,4){T}
\psset{linecolor=gray,labelsep=12pt}
\psline(0,0)(P)
\qdisk(B){2pt}
\qdisk(O){2pt}
\qdisk(T){2pt}
\uput(B){$y=-A$}
\uput(O){$y=0$}
\uput(T){$y=A$}
%
\pcline[linestyle=dashed](P)(Q)
\psset{linecolor=red}
\qdisk(P){5pt}
\qdisk(Q){5pt}
%
\pnode[!0 \i\space cos 1.5 mul](Q){Qy}
\psLine[linecolor=blue,linewidth=4pt,arrowinset=0]{->}(Q)(Qy)
\end{pspicture}}
\end{document} 