绘制在平面上平滑终止的 3D 曲面

绘制在平面上平滑终止的 3D 曲面

以下代码运行起来非常顺畅,但有一点除外:它会切断而不是平滑地达到椭圆,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 图中,在编译器失败之前,这只能进行到这一步。

相关内容