在 pgfplots 中仅绘制双曲面的区域

在 pgfplots 中仅绘制双曲面的区域

我对双曲面感兴趣u^2 + v^2 - w^2 = 1,它可以参数化为

u = cosh(x) cos(y),
v = cosh(x) sin(y),
w = sinh(x).

该参数化可用于在 pgfplots 中绘制双曲面,如下所示:

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=1.6}

\begin{document}

\begin{tikzpicture}
 \begin{axis}
  \addplot3[surf,
            fill=white,
            samples=10,
            samples y=72,
            domain=-1:1,
            y domain=0:360,
            z buffer=sort]
            ( {cosh(x)*cos(y)}, {cosh(x)*sin(y)}, {sinh(x)} );
 \end{axis}
\end{tikzpicture}

\end{document}

效果很好,但现在我想将绘图限制在 区域v + w > 0。就我的(x,y)参数而言,这读作cosh(x) sin(y) + sinh(x) > 0。根据 PGFPlots 手册,我应该能够使用选项restrict expr to domain来实现这一点,但是当我尝试时,我收到 LaTeX 错误:

! Package PGF Math Error: Could not parse input '' as a floating point number, sorry. The unreadable part was near ''..

我假设这个选项应该在级别上给出\addplot3,而不是在\begin{axis}级别上,但无论哪种方式都会出现错误。

实际上,我想要做的是绘制两次双曲面;首先,以柔和的灰色绘制完整的双曲面,然后在其上方,以明亮的颜色绘制感兴趣的区域,以便可以将其实际识别为双曲面的一部分。


我提供了更新的 MWE,因为我觉得变量名称的所有变化都有点令人困惑。以下是我打算做的:

\documentclass{article}

\usepackage{pgfplots}

\begin{document}

\begin{tikzpicture}
 \begin{axis}[view={120}{5},
              samples=20,
              samples y=72,
              domain=-2:2,
              y domain=0:360,
              z buffer=sort,
              variable=\u,
              variable y=\v]
  \addplot3[surf,
            restrict expr to domain={y+z}{0:100}]
            ( {cosh(u)*cos(v)}, {cosh(u)*sin(v)}, {sinh(u)} );
 \end{axis}
\end{tikzpicture}

\end{document}

安装不稳定版本的 pgfplots 后,它只会绘制双曲面的一半(由条件决定的一半y + z > 0),正如预期的那样。

答案1

这是当前稳定的 pgfplots 1.7 中的一个错误(抱歉)。

我已经在 pgfplots 不稳定版本中修复了这个问题(可从http://pgfplots.sourceforge.net/)。

请注意,您的示例在 pgfplots 中存在可用性问题:一旦 pgfplots 评估了参数坐标,它就会重新定义x导致X 坐标和yY 坐标结果。因此,如果您切换到 ,您的示例将起作用variable=u, variable y=w。当然,您也可以利用可用性问题并写入restrict expr to domain={y + z}{0:99999}

相关内容