使用 Tikz 制作带有磁盘的实体

使用 Tikz 制作带有磁盘的实体

我想要做一个图形,其中我提供一个函数 y=f(x)、一个数字 n(磁盘数量)并围绕 x 绘制旋转实体,如下所示: 在此处输入图片描述

如果有人知道如何使用 tikz、PGFplots、Tikz-euclide 等来做到这一点,我希望得到答案。非常感谢。

答案1

可以ceil在这里使用该功能。

\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\begin{document}
\begin{tikzpicture}
 \begin{axis}[hide axis,declare function={f(\x)=sqrt(ceil(\x));}]
  \addplot3[domain=0:10,domain y=0:360,surf,z buffer=sort,
    shader=interp,samples=51,samples y=36]
     (x,{f(x)*cos(y)},{f(x)*sin(y)});
  \addplot3[domain=0:360,fill=gray,samples=36]
     (10,{f(10)*cos(x)},{f(10)*sin(x)});
 \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

将其转化为问题中建议的参数化的一种方法是

\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\begin{document}
\begin{tikzpicture}
 \begin{axis}[hide axis,
 declare function={n=7;% <- number of steps
 tmin=0;% <- lower bound
 tmax=10;% <- upper bound
 sampling=8;% <- increasing this will make the steps more steplike, but also increase the compilation time
 f(\x)=sqrt(ceil(\x*n/(tmax-tmin)));}]
  \addplot3[domain=tmin:tmax,domain y=0:360,surf,z buffer=sort,
    shader=interp,samples=sampling*n+1,samples y=36]
     (x,{f(x)*cos(y)},{f(x)*sin(y)});
 \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容