我对双曲面感兴趣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 坐标和y
Y 坐标结果。因此,如果您切换到 ,您的示例将起作用variable=u, variable y=w
。当然,您也可以利用可用性问题并写入restrict expr to domain={y + z}{0:99999}
。