tikz/pgfplots - 用点云绘制 3D 曲面

tikz/pgfplots - 用点云绘制 3D 曲面

我正在尝试制作一个带有曲面和云中的 1000 个点的 3D 图,其中一些点将隐藏在曲面后面,但由于曲面的透明度而略微可见。但是,无论我做什么,所有点都是完全可见的,曲面绘制在隐藏点的后面。为了说明这个问题,我做了一个简单的例子,有两个点和一个透明曲面。上面的点没有被曲面隐藏,应该完全可见。第二个点被曲面隐藏,应该绘制在透明曲面后面,但与第一个点一样可见。有什么关于如何处理这个问题的建议吗?

\documentclass[tikz]{standalone}

\usepackage{amsmath}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}[view={25}{30}]

            \addplot3 [color=green, draw=none, mark=*, mark size=2]
                table[row sep=crcr] {%
                0 -4 10\\
                0 0 -15\\
                };

            \addplot3 [
                surf,
                shader=faceted,
                fill opacity=0.75,
                samples=25,
                domain=-4:4,
                y domain=-4:4
                ] {x^2-y^2};

        \end{axis}
   \end{tikzpicture} 
\end{document}

答案1

这是安装过滤器的erahfeza答案的扩展。这里的过滤器检查点是在表面上方还是下方。(它不是绝对完美的,因为点可能“位于”整个表面的“后面” y。我假设您没有这样的点。如果有,则需要考虑这种可能性。然后过滤器将取决于视角。)

\documentclass[tikz]{standalone}

\usepackage{amsmath}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\pgfplotsset{
            layers/my layer set/.define layer set={
            background,
            main,
            foreground
        }{
           },
           set layers=my layer set,
    }
\begin{document}
    \begin{tikzpicture}
        \begin{axis}[view={25}{30},mark layer=like plot]

            \addplot3 [color=green, draw=none, mark=*, mark size=2,
                on layer=background,
                z filter/.expression={z<x^2-y^2 ? z : nan}]
                table[row sep=crcr] {%
                0 0 15\\
                0 0 -15\\
                };

            \addplot3 [color=green, draw=none, mark=*, mark size=2,
                on layer=foreground,
                z filter/.expression={z>x^2-y^2 ? z : nan}]
                table[row sep=crcr] {%
                0 0 15\\
                0 0 -15\\
                };


            \addplot3 [
                surf,
                shader=faceted,
                fill opacity=0.75,
                samples=25,
                domain=-4:4,
                y domain=-4:4,
                on layer=main,
                ] {x^2-y^2};

        \end{axis}
   \end{tikzpicture} 
\end{document}

在此处输入图片描述

答案2

您应该需要\addplots在不同的图层上绘制。

\documentclass[tikz]{standalone}

\usepackage{amsmath}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\pgfplotsset{
            layers/my layer set/.define layer set={
            background,
            main,
            foreground
        }{
           },
           set layers=my layer set,
    }
\begin{document}
    \begin{tikzpicture}
        \begin{axis}[view={25}{30}]

            \addplot3 [color=green, draw=none, mark=*, mark size=2]
                table[row sep=crcr] {%
                0 0 15\\
                0 0 -15\\
                };

            \addplot3 [
                surf,
                shader=faceted,
                fill opacity=0.75,
                samples=25,
                domain=-4:4,
                y domain=-4:4,
                on layer=foreground,
                ] {x^2-y^2};

        \end{axis}
   \end{tikzpicture} 
\end{document}

在此处输入图片描述

相关内容