
Probablemente mi título no sea tan informativo. Mi problema es que intento "dibujar" hiperbordes en algunos vértices con el siguiente código:
\usepackage{tikz}
\tikzstyle{vertex} = [fill, shape=circle, opacity=1, node distance=80pt]
\tikzstyle{hyperedge} = [fill, opacity=1, cap=round, join=round, line width=60pt]
\tikzstyle{elabel} = [fill, shape=circle, node distance=30pt]
\pgfdeclarelayer{background}
\pgfsetlayers{background,main}
\begin{document}
\begin{tikzpicture}
\node[vertex,label=above left:$v_1$] (v1) {};
\node[vertex,right of=v1,label=above right:$v_2$] (v2) {};
\node[vertex,below of=v1,label=below left:$v_3$] (v3) {};
\node[vertex,right of=v3,label=below right:$v_4$] (v4) {};
\begin{pgfonlayer}{background}
\draw[hyperedge, color=yellow] (v1.center)--(v2.center)--(v3.center)--cycle;
\draw[hyperedge, color=pink, line width=45pt] (v2.center)--(v3.center)--(v4.center)--cycle;
\end{pgfonlayer}
\node[elabel,color=yellow,label=right:$C_1$] (e1) at (-3,0) {};
\node[elabel,below of=e1,color=pink,label=right:$C_2$] (e2) {};
\end{tikzpicture}
\end{document}
Esto produce lo siguiente:
No está mal, pero el cruce no es tan visible. Si configuro la opacidad de los hiperbordes en 0,5:
\tikzstyle{hyperedge} = [fill, opacity=0.5, cap=round, join=round, line width=60pt]
Yo obtengo:
La intersección es más visible aquí, pero como el "relleno" y las "líneas" de los ciclos también se cruzan, las partes afectadas se vuelven más opacas(?). ¿Existe una solución para esta situación? Tal vez dibujar las líneas solo en un lado del ciclo evitando la intersección con el relleno, pero ¿es posible?
Respuesta1
Creo que la solución adecuada es esta. Lo encontré en el manual:
Elimina la opacidad del estilo "hiperborde":
\tikzstyle{hyperedge} = [fill, cap=round, join=round, line width=60pt]
Coloque cada ventaja en su propio grupo de transparencia:
\begin{scope}[transparency group, opacity=0.5]
\draw[hyperedge, color=yellow] (v1.center)--(v2.center)--(v3.center)--cycle;
\end{scope}
\begin{scope}[transparency group, opacity=0.5]
\draw[hyperedge, color=pink, line width=45pt] (v2.center)--(v3.center)--(v4.center)--cycle;
\end{scope}
¡Gracias a todos por sus respuestas o comentarios!
Respuesta2
Truco sucio:
Si las líneas de tu forma particular son un poquito más anchas, no necesitas preocuparte por el color de relleno ya que las líneas llenan toda la forma:
\documentclass{standalone}
\usepackage{tikz}
\tikzset{
vertex/.style={fill, shape=circle, opacity=1, node distance=80pt},
hyperedgeline/.style={opacity=0.5, cap=round, join=round,line width=60pt},
elabel/.style={fill, shape=circle, node distance=30pt}
}
\pgfdeclarelayer{background}
\pgfsetlayers{background,main}
\begin{document}
\begin{tikzpicture}
\node[vertex,label=above left:$v_1$] (v1) {};
\node[vertex,right of=v1,label=above right:$v_2$] (v2) {};
\node[vertex,below of=v1,label=below left:$v_3$] (v3) {};
\node[vertex,right of=v3,label=below right:$v_4$] (v4) {};
\begin{pgfonlayer}{background}
\draw[hyperedgeline, color=yellow] (v1.center)--(v2.center)--(v3.center)--cycle;
\draw[hyperedgeline, color=pink, line width=47pt] (v2.center)--(v3.center)--(v4.center)--cycle;
\end{pgfonlayer}
\node[elabel,color=yellow,label=right:$C_1$] (e1) at (-3,0) {};
\node[elabel,below of=e1,color=pink,label=right:$C_2$] (e2) {};
\end{tikzpicture}
\end{document}
Respuesta3
Usar fill opacity
.
\documentclass{article}
\usepackage{tikz}
\tikzstyle{vertex} = [fill, shape=circle, opacity=1, node distance=80pt]
\tikzstyle{hyperedge} = [opacity=0.5,fill opacity=1, cap=round, join=round, line width=60pt]
\tikzstyle{elabel} = [fill, shape=circle, node distance=30pt]
\pgfdeclarelayer{background}
\pgfsetlayers{background,main}
\begin{document}
\begin{tikzpicture}
\node[vertex,label=above left:$v_1$] (v1) {};
\node[vertex,right of=v1,label=above right:$v_2$] (v2) {};
\node[vertex,below of=v1,label=below left:$v_3$] (v3) {};
\node[vertex,right of=v3,label=below right:$v_4$] (v4) {};
\begin{pgfonlayer}{background}
\draw[hyperedge, color=yellow] (v1.center)--(v2.center)--(v3.center)--cycle;
\draw[hyperedge, color=pink, line width=45pt] (v2.center)--(v3.center)--(v4.center)--cycle;
\end{pgfonlayer}
\node[elabel,color=yellow,label=right:$C_1$] (e1) at (-3,0) {};
\node[elabel,below of=e1,color=pink,label=right:$C_2$] (e2) {};
\end{tikzpicture}
\end{document}