3D 表面‘冲浪’没有给出任何结果

3D 表面‘冲浪’没有给出任何结果

我有参数ab和的值P。形状或表面S与它们的关系如下。

S = P (1- x^2/a^2 - y^2/b^2)^0.5

在图形生成过程中,我还想将比例的最小值设为-a-b将最大值设为。ab

这是该问题的 MWE,其中给出了a=1.777b=0.228和的值P=1.642

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{
    compat=1.3,
}
\begin{document}
    \begin{tikzpicture}
    \begin{axis}[
    xlabel={a},
    ylabel={b}, 
    colormap/jet
    ]
    \addplot3[surf]
    {1.642 * (1 - x^2/1.777^2 -y^2/0.228^2)^0.5};
    \end{axis}
    \end{tikzpicture}
\end{document}

它应该生成类似下面给出的图像(由 matlab 生成)。 所需图像

但是,它给出的只是一个带有轴的空白图形。该如何修复它?

生成的图像

答案1

pgfplots无法处理复数。您可以声明一个新函数realsqrt,该函数仅取平方根的实部,并对复数参数返回 0。

为了摆脱蓝色基地,z=0可以使用

\addplot3[point meta={z<=0 ? nan : z},...]

但随后,人们必须加大对善恶的采样,以消除锯齿状的边界。

\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}[
  declare function={realsqrt(\x) = ifthenelse(\x<0,0,sqrt(\x));}
  ]
    \begin{axis}[
      domain=-2:2,
      y domain=-.3:.3,
      xlabel={a},
      ylabel={b}, 
      colormap/jet,
      samples=41,
      ]
      \addplot3[surf,shader=interp]
      {1.642 * realsqrt(1 - x^2/1.777^2 - y^2/0.228^2)};
    \end{axis}
  \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容