
可能我的標題內容比較不豐富。我的問題是我嘗試使用以下程式碼在某些頂點上「繪製」超邊:
\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}
這會產生以下結果:
還不錯,只是路口不太明顯。如果我將超邊的不透明度設為 0.5:
\tikzstyle{hyperedge} = [fill, opacity=0.5, cap=round, join=round, line width=60pt]
我得到:
此處的交集更加明顯,但由於循環的“填充”和“線”也相交,因此受影響的部分變得更加不透明(?)。對於這種情況有解決方法嗎?也許只在循環的一側繪製線條,避免與填充相交,但這可能嗎?
答案1
我認為正確的解決方案是這樣的。我在手冊中找到了它:
刪除“hyperedge”樣式的不透明度:
\tikzstyle{hyperedge} = [fill, cap=round, join=round, line width=60pt]
將每條邊放入自己的透明度群組中:
\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}
謝謝大家的答案!
答案2
骯髒的駭客:
如果特定形狀的線條稍微寬一點,則無需擔心任何填滿顏色,因為線條填滿了整個形狀:
\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}
答案3
使用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}