
Я хотел бы рисовать 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}