![3D 表面‘冲浪’没有给出任何结果](https://linux22.com/image/346445/3D%20%E8%A1%A8%E9%9D%A2%E2%80%98%E5%86%B2%E6%B5%AA%E2%80%99%E6%B2%A1%E6%9C%89%E7%BB%99%E5%87%BA%E4%BB%BB%E4%BD%95%E7%BB%93%E6%9E%9C.png)
我有参数a
、b
和的值P
。形状或表面S
与它们的关系如下。
S = P (1- x^2/a^2 - y^2/b^2)^0.5
在图形生成过程中,我还想将比例的最小值设为-a
,-b
将最大值设为。a
b
这是该问题的 MWE,其中给出了a=1.777
、b=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}
但是,它给出的只是一个带有轴的空白图形。该如何修复它?
答案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}