답변1
여기서 약간 중요하지 않은 유일한 작업은 배럴의 (곡선) 수직 경계의 임계 각도를 계산하는 것입니다. 이 답변은 잠재적으로 새로운 것을 시도합니다. 내가 아는 한, 지금까지 이러한 값은 "기본에 따른" 방식으로 계산되었으며 이 답변에서와 같이 3D 뷰를 설치하기 위해 라이브러리를 사용하는지 또는 라이브러리를 사용 pgfplots
하는지 에 따라 표현이 다릅니다. 여기서 이것은 독립적인 방식으로 계산됩니다. 이것이 신비한 함수가 수행하는 작업입니다. 나머지는 모두 표준입니다.tikz-3dplot
perspective
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}