Solución:
Parece tener estudiantes muy viejos, que saben cómo se veían estos tocadiscos.
documentclass[tikz,border=3mm]standalone
usepackagetikz-3dplot
usetikzlibraryshadings
begindocument
tdplotsetmaincoords7030
foreach Angle in 180,185,...,360
begintikzpicture[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,
end angle=tdplotmainphi-180,radius=0.2]
-- ($(tdplotmainphi-180:0.2)+(0,0,1)$)
arc[start angle=tdplotmainphi-180,
end angle=tdplotmainphi,radius=0.2] -- cycle;
draw[fill=orange] (0,0,1) circle[radius=0.2];
,pics/projected cyl/.style=code=
draw[gray,fill=gray!20] (-0.2,0) rectangle (0.2,1);
]
beginscope[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;
endscope
beginscope[canvas is xy plane at z=0]
shade[upper left=black,upper right=gray!30,
lower left=gray!50,lower right=black,even odd rule] circle[radius=5]
circle[radius=2];
draw foreach r in 2.1,2.2,...,4.9 circle[radius=r];
fill[blue!50!gray] (0,0) circle[radius=2];
endscope
path (Angle:4) piccyl;
endtikzpicture
enddocument
PD: Al principio no entendí lo que se quería decir con “detalles”, pero después de protagonizar el tiempo suficiente en la captura de pantalla, yo también pude ver un pato (aunque todavía no estoy seguro de si realmente está allí).
documentclass[tikz,border=3mm]standalone
usepackagetikz-3dplot
usepackagetikzducks
usetikzlibraryarrows.meta,bending,shadings
begindocument
tdplotsetmaincoords7030
foreach Angle in 5,15,...,355
begintikzpicture[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,
end angle=tdplotmainphi-180,radius=0.2]
-- ($(tdplotmainphi-180:0.2)+(0,0,1)$)
arc[start angle=tdplotmainphi-180,
end angle=tdplotmainphi,radius=0.2] -- cycle;
draw[fill=orange] (0,0,1) circle[radius=0.2];
,pics/projected cyl/.style=code=
draw[gray,fill=gray!20] (-0.2,0) rectangle (0.2,1);
]
beginscope[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;
endscope
beginscope[canvas is xy plane at z=0]
shade[upper left=black,upper right=gray!30,
lower left=gray!50,lower right=black,even odd rule] circle[radius=5]
circle[radius=2];
draw foreach r in 2.1,2.2,...,4.9 circle[radius=r];
fill[blue!50!gray] (0,0) circle[radius=2];
path[nodes=transform shape,anchor=base,font=largesffamily,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]]
(180:5.5) arc[start angle=180,end angle=240,radius=5.5];
endscope
path (Angle:4) piccyl;
endtikzpicture
enddocument
PD: De alguna manera, no es del todo trivial de usar decorations.text
junto con proyecciones en un plano.
Si solo necesita el GIF, ¿se requiere necesariamente LaTeX? Si considera otra alternativa y mi respuesta no se considera spam, hay un ejemplo de ConTeXt (compílelo aquí cuando una instalación no sea factible en su caso). Desafortunadamente, no hay 3D sofisticado:
starttext
%#1: start; #2: end; #3: step; #4: content
dostepwiserecurse033030%
startMPpage
labeloffset := 5bp;
numeric u; u := 1cm;
numeric alpha; alpha := recurselevel;
pair peg, lilshadow;
path stick;
stick := fullsquare xscaled 0.2u yscaled 2.2u shifted (1.5u*right);
peg := u*dir alpha;
lilshadow := (1.5u,ypart peg);
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
Elegí colores simples, pero el ajuste adicional depende de su gusto. Usando lo siguiente en la línea de comando (mi archivo es 104.pdf
en el ejemplo):
convert -density 200 104.pdf 104-%02d.png
convert -delay 15 -dispose 2 104-*.png 104.gif
Finalmente obtengo este GIF:
EDITAR: Como se señaló anteriormente, al cambiar el paso y el punto final, tenemos un GIF que se mueve más rápido o más lento. Si usamos
dostepwiserecurse034515{%
en su lugar, y con la misma configuración para convert
, obtenemos esto:
Una solución de PSTricks solo para fines divertidos o de comparación.
documentclass[pstricks,border=12pt]standalone
usepackagepst-node
begindocument
foreach i in0,10,...,350%
beginpspicture(-5,-5)(6.5,5)
pscircle(0,0)4
psline(5,-5)(5,5)
pnodes(4;i)P(!5 4 ispace sin mul)Q(5,-4)B(5,0)O(5,4)T
pssetlinecolor=gray,labelsep=12pt
psline(0,0)(P)
qdisk(B)2pt
qdisk(O)2pt
qdisk(T)2pt
uput[0](B)$y=-A$
uput[0](O)$y=0$
uput[0](T)$y=A$
%
pcline[linestyle=dashed](P)(Q)
pssetlinecolor=red
qdisk(P)5pt
qdisk(Q)5pt
%
pnode[!0 ispace cos 1.5 mul](Q)Qy
psLine[linecolor=blue,linewidth=4pt,arrowinset=0]->(Q)(Qy)
endpspicture
enddocument
Si sostienes algún titubeo y disposición de progresar nuestro tutorial te sugerimos escribir una nota y con mucho placer lo ojearemos.