答え1
ここでの唯一のやや非自明なタスクは、バレルの (湾曲した) 垂直境界の臨界角を計算することです。この回答は、潜在的に新しいことを試みています。私の知る限り、これまでこれらの値は「基底依存」の方法で計算されており、式は、 を使用するpgfplots
かtikz-3dplot
、この回答のようにperspective
3D ビューをインストールするライブラリを使用するかによって異なります。ここでは、これは独立した方法で計算されます。これが謎の関数がphicrit
行うことです。残りはすべて標準です。
\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}
これらの樽のいくつかにはマーモットが訪れ、蜂蜜酒の世話をします。
\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}