Wie mache ich ein Fass

Wie mache ich ein Fass

Hallo liebe Benutzer von PGFplots, ich muss diese Figur erstellen, ein Fass. Wie kann ich dies mit PGFplots tun?

Bildbeschreibung hier eingeben

Antwort1

Die einzige etwas nicht triviale Aufgabe hier ist die Berechnung des kritischen Winkels der (gekrümmten) vertikalen Begrenzung des Fasses. Diese Antwort versucht, etwas potenziell Neues zu tun. Meines Wissens wurden diese Werte bisher auf eine „basisabhängige“ Weise berechnet, und der Ausdruck unterscheidet sich, je nachdem, ob man verwendet pgfplotsoder tikz-3dplot, wie in dieser Antwort, die perspectiveBibliothek zum Installieren der 3D-Ansicht. Hier wird dies auf eine unabhängige Weise berechnet, das ist, was die mysteriöse Funktion phicrittut. Der ganze Rest ist Standard.

\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}

Bildbeschreibung hier eingeben

Einige dieser Fässer bekommen Besuch von Murmeltieren, die sich um den Honigschnaps kümmern.

\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}

Bildbeschreibung hier eingeben

verwandte Informationen