Hola, descubrimos la solución a tu pregunta, deslízate y la obtendrás aquí.
Solución:
Estos árboles se pueden dibujar convenientemente con el grow cyclic
opción. Este ejemplo es muy parecido al del manual pgf v3.1.5 en la p. 845
documentclass[tikz,border=3mm]standalone
usetikzlibrarytrees
begindocument
begintikzpicture[grow cyclic,nodes=circle,fill,inner sep=1.5pt,
level 1/.style=level distance=2.5cm,sibling angle=-360/5,
level 2/.style=font=footnotesize, level distance=2cm,sibling angle=40,
rotate=-360/20,semithick]
node % root
child foreach X in 1,...,5
node[label=540/5-X*360/5:X]
child node[label=180+360/20-X*360/5-20:$b_X$]
child node[label=180+360/20-X*360/5+20:$a_X$]
;
endtikzpicture
enddocument
Se puede hacer algo más versátil utilizando los ángulos hermanos reales en el cálculo del ancla de la etiqueta. Se almacena en pgfkeysvalueof/tikz/sibling angle
y difiere de un nivel a otro. (No, no estoy orgulloso del xdef
pero de esa manera el usuario solo tiene que ajustar el ángulo una vez).
documentclass[tikz,border=3mm]standalone
usetikzlibrarytrees
begindocument
begintikzpicture[grow cyclic,nodes=circle,fill,inner sep=1.5pt,
level 1/.style=level distance=2.5cm,sibling angle=-360/5,
level 2/.style=font=footnotesize, level distance=2cm,sibling angle=60,
rotate=-360/20,semithick]
node[label=above:$0$] % root
child foreach X in 1,...,5
node[label=-1.5*pgfkeysvalueof/tikz/sibling angle+pgfkeysvalueof/tikz/sibling angle*X:X]xdefLevelOneSiblingAnglepgfkeysvalueof/tikz/sibling angle
child node[label=180-LevelOneSiblingAngle/5+X*LevelOneSiblingAngle-pgfkeysvalueof/tikz/sibling angle/2:$b_X$]
child node[label=180-LevelOneSiblingAngle/5+X*LevelOneSiblingAngle+pgfkeysvalueof/tikz/sibling angle/2:$a_X$]
;
endtikzpicture
enddocument
También se puede piratear el growth function
para registrar el ángulo de rotación actual para que la colocación de los ángulos sea más conveniente. La idea de piratear la función de crecimiento no es para nada nueva, se pueden ver ejemplos muy buenos, por ejemplo, aquí, pero tal vez este truco sí lo sea. La pendiente del borde actual ahora está disponible en una función currangle
. Decidí no incluir la rotación general, que está establecida por rotate
, porque creo que es más limpio de esta manera. Es concebible que este truco también sea útil para mindmaps
.
documentclass[tikz,border=3mm]standalone
usetikzlibrarytrees
makeatletter
def[email protected]@[email protected]%
pgfmathsetmacrocurrentrotation(pgfkeysvalueof/tikz/sibling angle)*(-.5-.5*tikznumberofchildren+tikznumberofcurrentchild)%
pgftransformrotatecurrentrotation%
expandafterxdefcsname [email protected]@[email protected]@romannumeraltikztreelevelendcsnamecurrentrotation%
pgftransformxshiftthetikzleveldistance%
%
pgfmathdeclarefunctioncurrangle0begingroup
pgfmathparse(pgfkeysvalueof/tikz/sibling angle)*(-.5-.5*tikznumberofchildren+tikznumberofcurrentchild)%
ifcasetikztreelevel
or
or
pgfmathparsepgfmathresult+[email protected]@[email protected]@i%
or
pgfmathparsepgfmathresult+[email protected]@[email protected]@i+[email protected]@[email protected]@ii%
fi
typeoutthetikznumberofcurrentchild:pgfmathresult%
pgfmathsmugglepgfmathresult
endgroup
tikzset
recorded grow cyclic/.style=
edge from parent/.append style=reset cm,
growth function=[email protected]@[email protected],
%
tikzoptionrecorded clockwise fromlet[email protected]=[email protected]@[email protected]@[email protected]def[email protected]@[email protected]@start#1%
makeatother
begindocument
begintikzpicture[recorded grow cyclic,nodes=circle,fill,inner sep=1.5pt,
level 1/.style=level distance=2.5cm,sibling angle=-360/5,
level 2/.style=font=footnotesize, level distance=2cm,sibling angle=60,
semithick,rotate=-360/20]
node[label=above:$0$] % root
child foreach X in 1,...,5
node[label=currangle-90-360/20:X]
child node[label=currangle-360/20:$b_X$]
child node[label=currangle-360/20:$a_X$]
;
endtikzpicture
enddocument
He aquí una forma de hacerlo.
documentclassarticle
usepackagetikz
usetikzlibraryarrows, positioning
begindocument
begintikzpicture[every node/.style=shape=circle,fill=black,circle,inner sep=1pt]
node[label=above:$0$] (T0)
child [grow=126] node[label=above right:$1$] (T1)
child node[label=above:$b_1$] (Tb1)
child node[label=left:$a_1$] (Ta1)
child [grow= 54] node[label=above left:$2$] (T2)
child node[label=right:$b_2$] (Tb2)
child node[label=above:$a_2$] (Ta2)
child [grow=344] node[label=above:$3$] (T3)
child node[label=right:$a_3$] (Ta3)
child node[label=right:$b_3$] (Tb3)
child [grow=270] node[label=right:$4$] (T4)
child node[label=left:$a_4$] (Ta4)
child node[label=right:$b_4$] (Tb4)
child [grow=198] node[label=above:$5$] (T5)
child node[label=left:$a_5$] (Ta5)
child node[label=left:$b_5$] (Tb5) ;
endtikzpicture
enddocument
Comentarios y calificaciones
Nos puedes añadir valor a nuestro contenido informacional añadiendo tu experiencia en las críticas.