我想z=x^2+y^2
在区间 上绘图0<z<9
。因此,通常我只是使用pgfplots
命令addplot3
,对于矩形域,这似乎不会造成太多麻烦。示例(来自在 TikZ 中是否有简单的方法可以绘制像双曲抛物面这样的直纹面?):
但是,就我而言,我想画一个抛物面,并且希望曲线的边缘位于平面r=3
上z=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}