如何画一棵这样的树?

如何画一棵这样的树?

我想画一棵水平树。简化版本有一个父节点和两个子节点,子节点之间通过贝塞尔曲线与其父节点相连。

现在我有这个:

\documentclass[a4]{article}
\usepackage{tikz}
\begin{document}   
\begin{tikzpicture}[inner sep = 1mm]    
    \pgfsetcornersarced{\pgfpoint{1mm}{1mm}};
    \node (n1) at (30mm, 0) [rectangle, draw] {First Child};
    \node (n2) at (30mm, 10mm) [rectangle, draw] {Second Child};
    \node (n3) at (0, 5mm) [rectangle, draw] {Parent};
    % \draw (n3.east) .. controls +(((n3.east.x + n1.west.x)/2, n3.east.y)) and +(((n3.east.x + n1.west.x)/2, n1.west.y)) .. (n1.west);
\end{tikzpicture}
\end{document}

在此处输入图片描述

我有一些疑问:

  1. 节点 n1 和 n2 是居中对齐的。如何将它们左对齐?

  2. 注释掉的那行是画一条连接n3和n2的贝塞尔曲线,我想计算出两个特定位置的中间位置,但是不知道怎么做。

  3. 如何知道文本和整个节点的精确边界框?我希望他们做额外的计算和绘图。

答案1

这是你想要的吗?

在此处输入图片描述

\documentclass{article}
\usepackage{tikz}
\begin{document}   
\begin{tikzpicture}[declare function={a=.5;}]
\path[nodes={draw,rounded corners,inner sep=1.5mm}]
(0,0)  node[fill=orange!50] (P) {Parents}
(2,-a) node[right,fill=yellow!50] (C1) {First Child}
(2,a)  node[right,fill=yellow!50] (C2) {Second Child}
;
\draw[->] (P) to[out=0,in=180] (C1);
\draw[->] (P) to[out=0,in=180] (C2);
\end{tikzpicture}
\end{document}

您可能喜欢使用controls来控制shooting forces

\draw[->] (P.0) .. controls +(0:1.2) and +(180:1.2) .. (C1.180);
\draw[->] (P.0) .. controls +(0:1.2) and +(180:1.2) .. (C2.180);

在此处输入图片描述

或者这个(M中间)

在此处输入图片描述

\path (P.0)--(P-|C1.180) coordinate[midway] (M);
\draw[-stealth] (P.0)--(M)|-(C1.180);
\draw[-stealth] (P.0)--(M)|-(C2.180);

相关内容