几何图形“框住”森林树木

几何图形“框住”森林树木

有什么方法可以将我的森林树设计成圆锥形状吗?

这是我目前得到的:

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{float}
\usepackage[linguistics]{forest}
\usetikzlibrary{positioning,fit,calc,cd}
\begin{document}
    \begin{figure}[H]
        \centering
        \begin{tikzpicture}
              \draw[dashed] (0,0) arc (170:10:2cm and 0.4cm)coordinate[pos=0] (a);
              \draw (0,0) arc (-170:-10:2cm and 0.4cm)coordinate (b);
              \draw (a) -- ([yshift=4cm]$(a)!0.5!(b)$) -- (b);
         \end{tikzpicture}
        \begin{forest}
        [0[1[0[1\\ \vdots][1\\ \vdots][2\\ \vdots]][2[0\\ \vdots]]][1[0\\ \vdots][2\\ \vdots]][2[0\\ \vdots]]]
        \end{forest}
    \end{figure}
\end{document}

树与锥

现在,我只需要两个图形以某种方式重叠。

答案1

使用tikzmark,您可以在森林根部放置一个节点,然后从那里绘制圆锥体,并带有选项remember picture, overlay]
请注意,我没有做任何数学运算,只是随意画的。您显然可以定义一个“真实”圆锥体,但这取决于您到底需要什么。

几何图形“框住”森林树木

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{float}
\usepackage[linguistics]{forest}
\usetikzlibrary{positioning,fit,calc,cd,tikzmark}
\begin{document}
    \begin{figure}[H]
        \centering
        
        \begin{forest}
        [\subnode{ROOT}{0}
            [1
                [0
                    [1\\ \vdots]
                    [1\\ \vdots]
                    [2\\ \vdots]]
                    [2[0\\ \vdots]
                ]
            ]
        [1
            [0\\ \vdots]
            [2\\ \vdots]]
            [2
                [0\\ \vdots]
            ]
        ]
        \end{forest}
        
        \begin{tikzpicture}[remember picture,overlay]
                \path ($(ROOT)+(0,2)$) coordinate (S);
                \draw (S) --++ (-60:8) coordinate (rbase)
                      (S) --++ (-120:8);
                \draw (rbase) arc (-5:-175:4.01cm and 0.8cm);
                \draw[dashed] (rbase) arc (5:175:4.01cm and 0.8cm);
         \end{tikzpicture}
    \end{figure}
\end{document}

答案2

SebGlav 的解决方案效果很好,但它有两个缺点。首先,由于 ,我们需要两个编译周期tikzmark。其次,周围的文本可能会与锥体重叠。下面的替代解决方案利用了这样一个事实:你可以在树的最后一个右括号和 之后放置任何 TikZ 代码\end{forest}。为了在下面的树周围绘制锥体,我使用了 OP 的树代码和来自的经过最低限度调整的 TikZ 锥体代码SebGlav 的回答(我只需要ROOT在锥体的第一行中删除。树后面的 TikZ 代码应用于根注释的上下文中,就好像它是键的参数一样tikz,因此相对节点()指的是根节点。)

\documentclass{article}
\usepackage{tikz}
\usepackage{float}
\usepackage[linguistics]{forest}
\begin{document}
\begin{figure}[H]
  \centering
  \begin{forest}
    [0[1[0[1\\ \vdots][1\\ \vdots][2\\ \vdots]][2[0\\ \vdots]]][1[0\\ \vdots][2\\ \vdots]][2[0\\ \vdots]]]
    \path ($()+(0,2)$) coordinate (S);
    \draw (S) --++ (-60:8) coordinate (rbase)
    (S) --++ (-120:8);
    \draw (rbase) arc (-5:-175:4.01cm and 0.8cm);
    \draw[dashed] (rbase) arc (5:175:4.01cm and 0.8cm);
  \end{forest}
\end{figure}
\end{document}

相关内容