
Wahrscheinlich ist mein Titel nicht so informativ. Mein Problem ist, dass ich versuche, mit dem folgenden Code Hyperkanten auf einige Eckpunkte zu „zeichnen“:
\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}
Das Ergebnis ist:
Es ist nicht schlecht, aber die Schnittmenge ist nicht so gut sichtbar. Wenn ich die Deckkraft der Hyperkanten auf 0,5 einstelle:
\tikzstyle{hyperedge} = [fill, opacity=0.5, cap=round, join=round, line width=60pt]
Ich bekomme:
Die Schnittmenge ist hier besser sichtbar, aber da sich auch die „Füllung“ und die „Linien“ der Zyklen schneiden, werden die betroffenen Teile undurchsichtiger(?). Gibt es eine Problemumgehung für diese Situation? Vielleicht die Linien nur auf einer Seite des Zyklus zeichnen und so eine Überschneidung mit der Füllung vermeiden, aber ist das möglich?
Antwort1
Ich denke, die richtige Lösung ist diese. Ich habe sie im Handbuch gefunden:
Entfernen Sie die Deckkraft aus dem Stil „Hyperedge“:
\tikzstyle{hyperedge} = [fill, cap=round, join=round, line width=60pt]
Platzieren Sie jede Kante in einer eigenen Transparenzgruppe:
\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}
Vielen Dank an alle für eure Antworten!
Antwort2
Schmutziger Hack:
Wenn die Linien Ihrer bestimmten Form ein klein wenig breiter sind, müssen Sie sich keine Gedanken über die Füllfarbe machen, da die Linien die gesamte Form ausfüllen:
\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}
Antwort3
Verwenden 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}