如何以“干净”的方式绘制 z 简单抛物面

如何以“干净”的方式绘制 z 简单抛物面

我想z=x^2+y^2在区间 上绘图0<z<9。因此,通常我只是使用pgfplots命令addplot3,对于矩形域,这似乎不会造成太多麻烦。示例(来自在 TikZ 中是否有简单的方法可以绘制像双曲抛物面这样的直纹面?):

在此处输入图片描述

但是,就我而言,我想画一个抛物面,并且希望曲线的边缘位于平面r=3z=9。我的第一次尝试是这样的(改编自上一个问题):

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xmin=-3,ymin=-3,zmin=0,xmax=3,ymax=3,zmax=10]
\addplot3 [surf,draw=none,restrict z to domain=0:9] {x^2+y^2};
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

显然,该范围导致了一个问题:抛物面打印出来一点也不好看,因为最后计算的 z 值不在z=9,而是在 下方的某个地方z=9,并且对于每对坐标 (x,y) 来说都是不同的。

我可以设置samples y=300,但编译时间会非常长。此外,它限制了文档的可能性,因为我消耗了大量堆栈大小。

在此处输入图片描述

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xmin=-3,ymin=-3,zmin=0,xmax=3,ymax=3,zmax=10]
\addplot3 [surf,draw=none,restrict z to domain=0:9,samples y=300] {x^2+y^2};
\end{axis}
\end{tikzpicture}
\end{document}

肯定有更好的方法来做到这一点?

答案1

正如 percusse 在评论中所说,你可以使用极坐标:

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xmin=-3,ymin=-3,zmin=0,xmax=3,ymax=3,zmax=10]
\addplot3 [surf,draw=none,restrict z to domain=0:9, data cs=polar, domain=0:360, y domain=0:3] (x, y, y^2);
\end{axis}
\end{tikzpicture}
\end{document}

相关内容