我正在尝试绘制斐波那契树,但为了让它们看起来更像真实的树,我按照以下条件反向绘制它们:
- 第 n 个斐波那契树(Ft)应该有 F_n 个叶子(最终节点)
- 第 n 个 Ft 的左分支为第 (n-1) 个 Ft,右分支为第 (n-2) 个 Ft。
- 每个分支都有权重。如果向左走,则权重为 1;如果向右走,则权重为 2。
- 图中用树枝的不同长度来表示重量的差异
- 所有“短”分支应该具有相同的长度,并且所有“长”分支也应该具有相同的长度。
(见下面的代码和图片)
现在我正在手动进行操作,我确信这是最糟糕的方式,正如我的 MWE 所见
\documentclass{article}
\usepackage{xcolor}
\usepackage{tikz}
\begin{document}
\begin{minipage}{0.4\linewidth}
This is $Ft_3$:
\begin{tikzpicture}
\draw (0,0) -- (0,2);
\draw (0,2) -- +(-1,1);% short
\draw (0,2) -- +(1.4,1.4);% long
\end{tikzpicture}
\end{minipage}%
\hfil%
\begin{minipage}{0.4\linewidth}
This is $Ft_4$:
\begin{tikzpicture}
\draw (0,0) -- (0,2);
\draw[red] (0,2) -- +(-1,1);% <- left is shorter
\draw[blue] (0,2) -- +(1.4,1.4);% <- right is longer
\draw[red] (-1,3) -- +(-1,1);% <- left is shorter
\draw[blue] (-1,3) -- +(1.4,1.4);% <- right is longer
\end{tikzpicture}
\end{minipage}
This is $Ft_5$, the left part is (a modification of) {\color{red}$Ft_4$} and the right part is (a modification of) {\color{blue}$Ft_3$}:
\begin{tikzpicture}
\draw (0,0) -- (0,2); %root
\draw[red] (0,2) -- +(-1.5,1);% short
\draw[red] (-1.5,3) -- +(-0.5,1.5);% short
\draw[red] (-1.5,3) -- +(1,2.5);% long
\draw[red] (-2,4.5) -- +(-.8,.8);% short
\draw[red] (-2,4.5) -- +(.8,.8);% short
\draw[blue] (0,2) -- +(2,1.5);% long
\draw[blue] (2,3.5) -- +(-.8,.8);% short
\draw[blue] (2,3.5) -- +(.8,2);% long
\end{tikzpicture}
\end{document}
根部被放大,使其看起来“更好”。可以看出,图纸不能完全模拟,以避免树枝重叠
答案1
含forest
包装:
\documentclass{article}
\usepackage{forest}
\begin{document}
This is $Ft_3$:
\begin{center}
\begin{forest}
for tree={
% nodes
minimum width = 4em,
delay = {where content={}{shape=coordinate}{},
% tree
calign=fixed edge angles,
calign angle=45,
grow=north,
},
}
% tree body
[
[
[ ]
[
[]
[]
]
]
]
\end{forest}
\end{center}
\end{document}
注意,我没有添加权重(这很容易做到),因为我看不懂你的描述。如果你能提供一张包含权重的树形草图,我会添加它们。
附录: 问题中最后一棵树的 MWE:
\documentclass{article}
\usepackage{forest}
\begin{document}
This is $Ft_5$, the left part is (a modification of) \textcolor{red}{$Ft_4$} and the right part is (a modification of) \textcolor{blue}{$Ft_3$}:
\begin{center}
\begin{forest}
for tree = {calign=fixed edge angles,
if level = 1{calign angle=60}%
{calign angle=30},
grow'=north,
},
delay={where content={}{shape=coordinate}{}},
%
[
[
[, for tree={edge={red}}
[
[,tier=L3]
[,tier=L3]
]
[,tier=L3]
]
[, for tree={edge={blue}}
[,tier=L3]
[]
]
]
]
\end{forest}
\end{center}
\end{document}