Respuesta1
La única tarea ligeramente no trivial aquí es calcular el ángulo crítico del límite vertical (curvo) del cañón. Esta respuesta intenta hacer algo potencialmente nuevo. Hasta donde yo sé, hasta ahora estos valores se han calculado de forma "dependiente de la base" y la expresión difiere según se use o pgfplots
, tikz-3dplot
como en esta respuesta, la perspective
biblioteca para instalar la vista 3D. Aquí esto se calcula de forma independiente, esto es lo que phicrit
hace la misteriosa función. Todo lo demás es estándar.
\documentclass[tikz,border=3mm]{standalone}
\definecolor{irk}{RGB}{138,204,183}
\usetikzlibrary{perspective}
\makeatletter
\pgfmathdeclarefunction{phicrit}{0}{%
\begingroup%
\pgfmathparse{atan2(\pgf@xx,\pgf@yx)}%
\pgfmathsmuggle\pgfmathresult\endgroup%
}%
\makeatother
\begin{document}
\begin{tikzpicture}[3d view={110}{15},declare function={rr(\x)=2.3*exp(-\x*\x/45);
h=3;},>=stealth,semithick]
\foreach \X [evaluate=\X as \Z using {-2*h+\X*h}] in {1,2,3}
{\draw[irk,inner color=irk!20!white,outer color=irk!80!white]
plot[smooth cycle,variable=\t,domain=0:360]
({rr(\Z)*sin(\t)},{rr(\Z)*cos(\t)},\Z);
\draw[magenta,ultra thick] (0,0,\Z) -- (0,{rr(\Z)},\Z);
\ifcase\X
\or
\fill[magenta] (0,0,\Z) circle[radius=3pt];
\path (0,0,\Z) node[left=1ex] {$-h$} -- node[above] {$r$} (0,{rr(\Z)},\Z);
\or
\path (0,0,\Z) -- node[above] {$R$} (0,{rr(\Z)},\Z);
\or
\fill[magenta] (0,0,\Z) circle[radius=3pt];
\path (0,0,\Z) node[left=1ex] {$h$} -- node[above] {$r$} (0,{rr(\Z)},\Z);
\fi
\ifnum\X<3
\draw[dashed,gray] (0,0,\Z) -- ++ (0,0,h);
\else
\draw[->] (0,0,\Z) -- ++ (0,0,1) node[pos=1.2] {$z$};
\fi}
\draw[irk] plot[variable=\t,smooth,domain=-h:h]
({rr(\t)*sin(phicrit)},{rr(\t)*cos(phicrit)},\t);
\draw[irk] plot[variable=\t,smooth,domain=-h:h]
({rr(\t)*sin(phicrit+180)},{rr(\t)*cos(phicrit+180)},\t);
\draw[dashed,gray] ({rr(0)},0,0) -- ({-rr(0)-1},0,0)
(0,{rr(0)},0) -- (0,{-rr(0)-1},0);
\draw[->] ({rr(0)},0,0) -- ++ (1,0,0) node[pos=1.2] {$x$};
\draw[->] (0,{rr(0)},0) -- ++ (0,1,0) node[pos=1.2] {$y$};
\end{tikzpicture}
\end{document}
Algunas de estas barricas reciben la visita de marmotas, que se encargan del licor de miel.
\documentclass[tikz,border=3mm]{standalone}
\usepackage{tikzlings}
\usetikzlibrary{perspective}
\makeatletter
\pgfmathdeclarefunction{phicrit}{0}{%
\begingroup%
\pgfmathparse{atan2(\pgf@xx,\pgf@yx)}%
\pgfmathsmuggle\pgfmathresult\endgroup%
}%
\makeatother
\begin{document}
\begin{tikzpicture}[declare function={rr(\x)=2.3*exp(-\x*\x/45);
h=3;},>=stealth,semithick]
\fill[3d view={110}{15}] plot[variable=\t,smooth cycle,domain=0:360,samples=37]
({rr(h)*sin(\t)},{rr(h)*cos(\t)},h);
\marmot[3D,shift={(0,1.5)},scale=1.4,whiskers,teeth]
\foreach \X [evaluate=\X as \CF using {int(70+20*cos(\X*30+80))}] in {1,...,12}
{\draw[3d view={110}{15},top color=brown!\CF!black!80!white,bottom color=brown!\CF!black!80!white]
plot[variable=\t,smooth,domain=-h:h]
({rr(\t)*sin(phicrit+\X*15-15)},{rr(\t)*cos(phicrit+\X*15-15)},\t) --
plot[variable=\t,smooth,domain=0:15]
({rr(h)*sin(phicrit+\X*15-15+\t)},{rr(h)*cos(phicrit+\X*15-15+\t)},h) --
plot[variable=\t,smooth,domain=h:-h]
({rr(\t)*sin(phicrit+\X*15)},{rr(\t)*cos(phicrit+\X*15)},\t) --
plot[variable=\t,smooth,domain=15:0]
({rr(-h)*sin(phicrit+\X*15-15+\t)},{rr(-h)*cos(phicrit+\X*15-15+\t)},-h)
-- cycle; }
\end{tikzpicture}
\end{document}