Equilibrio de opacidades entre relleno y dibujo

Equilibrio de opacidades entre relleno y dibujo

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:

fullopacidad

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:

ingrese la descripción de la imagen aquí

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}

solución

¡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}

ingrese la descripción de la imagen aquí

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}

ingrese la descripción de la imagen aquí

información relacionada