以下代码运行起来非常顺畅,但有一点除外:它会切断而不是平滑地达到椭圆,x^2/4+y^2/9=1。
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
unit vector ratio={1 1 1},
axis lines=middle,
xmin=-2.25, xmax=2.25,
ymin=-3.25, ymax=3.25,
zmin=-0.25, zmax={2*sqrt(3)+0.5},
xlabel=\(x\),
ylabel=\(y\),
zlabel=\(z\),
ytick={-3,0,3},
ztick={0,{2*sqrt(3)}},
zticklabels={\(0\),\(2\sqrt3\)}
]
\addplot3[surf,samples=41,restrict expr to domain={x^2/4+y^2/9}{0:1}]{0};
\addplot3[surf,samples=41,restrict expr to domain={x^2/4+y^2/9}{0:1}]{2*sqrt(3-y^2/3)-2*abs(x)};
\end{axis}
\end{tikzpicture}
\end{document}
我到处寻找如何解决这个问题的方法。我尝试使用一个ifthenelse
函数,nan
当函数超出给定的椭圆范围时返回。我尝试使用一个max
函数,将给定的公式作为一个选项,或-0.3
将(超出zmin
)作为另一个选项。第一个产生的输出与我得到的相同。第二个有好有坏。它将表面带到椭圆,但随后在它周围添加了一个平面,这是我不想要的。我真的只想看到给定的表面以平滑的曲线一直接触椭圆。
我怀疑增加采样将会改善结果,但在 3d 图中,在编译器失败之前,这只能进行到这一步。