Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Árvore de jogo

+1 voto
11 visitas
perguntada Dez 18, 2017 em Programação Computacional por Raíssa (451 pontos)  
editado Dez 18, 2017 por Raíssa

Estou tentando desenhar uma árvore para um artigo e aparentemente o Latex é a ferramenta mais adequada para isso. No entanto, estou com dúvidas no código adequado uma vez que a árvore é complexa e tem muitos conjuntos de informação. A árvore está desenhada na imagem seguinte (em paint, mas dá para perceber a intuição do desenho)!A imagem será apresentada aqui.
As linhas curvas laranjas representam os conjuntos de informação e a linha verde representa um conjunto contínuo de ações.
Eu tentei esse código aqui:

\begin{tikzpicture}
\tikzstyle{hollow node}=[circle,draw,inner sep=1.5]
\tikzstyle{solid node}=[circle,draw,inner sep=1.5,fill=black]
\tikzset{
red node/.style={circle,draw=red,fill=red,inner sep=1.2},
blue node/.style={rectangle,draw=blue,inner sep=2.5}
}
% Specify spacing for each level of the tree
\tikzstyle{level 1}=[level distance=15mm,sibling distance=40mm]
\tikzstyle{level 2}=[level distance=15mm,sibling distance=30mm]
\tikzstyle{level 3}=[level distance=15mm,sibling distance=15mm]
\tikzstyle{level 4}=[level distance=15mm,sibling distance=12mm]

\node[hollow node,label=above:{Natureza}]{}
child{node(1)[solid node]{}
child{node[solid node]{} edge from parent node[left]{$P$}}
child{node[solid node]{} edge from parent node[right]{$N$}}
edge from parent node[left,xshift=-3]{$\theta$}
}
child{node(2)[solid node]{}
child{node[solid node]{} edge from parent node[left]{$P$}}
child{node[solid node]{} edge from parent node[right]{$N$}}
edge from parent node[right,xshift=3]{$1-\theta$}
};
\node at ($(1)!.5!(2)$) {$Governo$};
\end{tikzpicture}

Tal código é apenas o início da árvore, estou com dúvida em como adicionar novos ramos.
Alguém tem uma dica do que eu possa fazer para tentar alcançar o desenho correto dessa árvore? Há uma plataforma melhor para desenhar árvores desse tipo que o Latex?

Compartilhe

1 Resposta

+1 voto
respondida Dez 19, 2017 por Raíssa (451 pontos)  

Me reponderam em um fórum de Latex, vou postar aqui a solução caso alguém precise de fazer algo similar.
\documentclass[border=10pt]{standalone}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{forest}
\usetikzlibrary{calc}
\tikzset{
% Two node styles for game trees: solid and hollow
solid node/.style={circle,draw,inner sep=1.5,fill=black},
hollow node/.style={circle,draw,inner sep=1.5}
}
\begin{document}
\begin{forest}
for tree={
l sep'+=25pt,
s sep'+=5pt,
},
before typesetting nodes={
where content={}{}{
split option={content}{:}{my label,my edge label},
delay={content=},
},
delay={for descendants={if n children=0{}{solid node}}},
},
hollow node,
my label/.style={
if={isodd(n)}{label={[green!75!black, font=\small]left:#1}}{label={[green!75!black, font=\small]right:#1}}
},
my edge label/.style={
if={isodd(n)}{edge label={node [midway, red, left, font=\scriptsize] {$#1$}}}{edge label={node [midway, red, right, font=\scriptsize] {$#1$}}}
},
my arc/.style={
tikz+={
\draw [green!75!black] ($()!0.3!(!l)$) [bend left] to ($()!0.3!(!1) + (-5pt,2.5pt)$);
},
},
copy name template={#1-c},
copy connect/.style={
tikz+/.process={
Ow {name}
{
\draw [orange] () [bend left=15] to (##1-c);
}%
},
}
[N, label=above:Natureza
[G:\theta, my arc
[N:P, name=a, for children=copy connect
[T:\gamma[:A][:R]]
[T:\tau[:A][:R]]
[T:\phi[:A][:R]]
[T:1-\gamma-\tau-\phi[:A][:R]]
]
[:N, name=b]
]
[G:1-\theta, my arc, before typesetting nodes={prepend'={a}, append'={b}}
]
]
\node [font=\itshape] at (!r |- !r1) {Governo};
\end{forest}
\end{document}

...