我很陌生tikz
,但我想改进我的图片。理论上很简单:我有一棵树,表示为三角形有两个子树,由弯曲路径,并且我希望左子树的颜色与右子树的颜色不同。
这是我当前的代码:
\begin{tikzpicture}
% NODES
\node (r0) at ( 0.0, 0.0) {}; % root
\node (s0) at (-3.0, -4.0) {}; % extreme
\node (s1) at ( 3.0, -4.0) {}; % extreme
\node (si) at (-1.0, -4.0) {}; % inside
% DRAW TREE
\fill[fill=gray!20] (r0.center)--(s0.center)--(s1.center);
\path[draw] (r0)--(s0);
\path[draw] (s0)--(si);
\path[draw] (si)--(s1);
\path[draw] (s1)--(r0);
% DRAW NODES
\draw[color=black, fill=white] (r0) circle (.15);
\draw[color=black, fill=gray] (s0) circle (.15);
\draw[color=black, fill=gray] (s1) circle (.15);
\draw[color=black, fill=red] (si) circle (.15);
% DRAW PATH FROM ROOT
\draw[color=black, line width=1.5pt,densely dotted]
(r0) to [out=300, in=130] (si);
\end{tikzpicture}
我不知道如何创建两个填充图形。我尝试过“合并” 中的最后一个从根到节点的曲线形状\fill
,但它并没有达到我想要的效果:
\draw[draw,fill=red] (r0)--(s0)--(si) to [out=110, in=290] (r0);
欢迎任何提示!
答案1
只需用一种颜色填充整个三角形,然后就可以绘制一条路径来填充另一边。
输出
代码
\documentclass[margin=10pt]{standalone}
\usepackage{tikz}
\tikzset{
circ/.style={circle, fill=black, inner sep=2pt, node contents={}}
}
\begin{document}
\begin{tikzpicture}
% coordinates
\coordinate (r0) at (0,0);
\coordinate (s0) at (-3,-4);
\coordinate (si) at (-1,-4);
\coordinate (s1) at (3,-4);
%
\filldraw[draw=black, fill=gray!20] (r0) -- (s0) -- (si) -- (s1) -- cycle;
\filldraw[draw=black, fill=red, line width=1.5pt,densely dotted]
(r0) to[out=300, in=130] (si) -- (s1) -- cycle;
\draw[black, fill=white] (r0) circle (.15);
\draw[black, fill=gray] (s0) circle (.15);
\draw[black, fill=gray] (s1) circle (.15);
\draw[black, fill=red] (si) circle (.15);
\end{tikzpicture}
\end{document}
答案2
这是实现此目的的一种方法。我使用该backgrounds
库来避免在节点上进行绘制,而是使用节点的坐标。
我删除了绘制三角形背景的原始命令,改为分别绘制两半。此外,我使用坐标来(si.center)
真正填充整个三角形。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\begin{document}
\begin{tikzpicture}
% NODES
\node (r0) at ( 0.0, 0.0) {}; % root
\node (s0) at (-3.0, -4.0) {}; % extreme
\node (s1) at ( 3.0, -4.0) {}; % extreme
\node (si) at (-1.0, -4.0) {}; % inside
% DRAW TREE
\path[draw] (r0)--(s0);
\path[draw] (s0)--(si);
\path[draw] (si)--(s1);
\path[draw] (s1)--(r0);
% DRAW NODES
\draw[color=black, fill=white] (r0) circle (.15);
\draw[color=black, fill=gray] (s0) circle (.15);
\draw[color=black, fill=gray] (s1) circle (.15);
\draw[color=black, fill=red] (si) circle (.15);
% DRAW PATH FROM ROOT
\draw[color=black, line width=1.5pt,densely dotted]
(r0) to [out=300, in=130] (si);
% fill halves of triangle
\begin{scope}[on background layer]
\fill[green!20!white,on background layer] (r0) to [out=300, in=130] (si) -- (si.center) -- (s0.center) -- (r0.center) -- cycle;
\fill[blue!20!white,on background layer] (r0) to [out=300, in=130] (si) -- (si.center) -- (s1.center) -- (r0.center) -- cycle;
\end{scope}
\end{tikzpicture}
\end{document}