Tikzで集合\(A\cap B\) の部分に色をつける方法

集合の単元でプリントを作るのに \clip と\fill について少し勉強したので、ソースを提供します。

\begin{tikzpicture}[scale=0.4]
\draw (-4,-2.5)--(4,-2.5)--(4,2.5)--(-4,2.5)--cycle;
\draw (-1,0) circle(2);
\draw (1,0) circle(2);
	\begin{scope}   %ここから
	\fill[yellow,opacity=0.4] (-1,0) circle(2);
	\fill[cyan,opacity=0.2] (1,0) circle(2);
	\end{scope}   %ここまで
\draw (0,2.5) node {$U$};
\draw (-1.8,1.8) node {$A$};
\draw (1.8,1.8) node {$B$};
\end{tikzpicture}

上記のように入力すると、下のように図を描きます。Aの円の中心は(-1,0)でBの円の中心は(1,0)です。

この後は、上記のコードの\begin{scope}から\end{scope}の範囲のみを記述します。

\(A \cap B\)

Aの円のみをクリップで指定し、Bの円内に色を付けました。

\begin{scope}   %ここから
\clip (-1,0) circle(2);
\fill[red ,opacity=0.5] (1,0) circle(2);
\end{scope}   %ここまで

\(A \cup B\)

AとBの円をダブルで指定し、両方に色をつけました。

\begin{scope}   %ここから
\fill[red ,opacity=0.5] (1,0) circle(2) (-1,0) circle(2);
\end{scope}   %ここまで

\( \overline{A} \cap B \)

Bの円をクリップし、Uの範囲でAの円を除いて色を塗りました。\fillのところで、rectangleの後に、circleを指定すると、circleの部分を空けて塗ることができます。

\begin{scope}   %ここから
\clip (1,0) circle(2);
\fill[red ,opacity=0.5] (-4,-2.5)rectangle(4,2.5) (-1,0) circle(2);
\end{scope}   %ここまで

\(\overline{A} \cup B \)

rectangle の中を色塗りする指定を\fillでしていますが、その後の図形で、枠線を1回跨ぐごとに、塗る、塗らないの指定をするというルールになっています。Aの円を1回、Bの円を2回記載することで、Bの円内は偶数回となるので、塗られます。一方、Aの三日月状の範囲は奇数回ですので、塗られないことになります。

\begin{scope}   %ここから
\fill[red ,opacity=0.5] (-4,-2.5)rectangle(4,2.5) (-1,0) circle(2) (1,0) circle(2) (1,0) circle(2);
\end{scope}   %ここまで

\( \overline{A} \cap \overline{B}= \overline{A\cup B} \)

rectangle の中の 円Aを除いて\clipで指定します。
その次の行で、rectangle の中の円Bを除いて\fillで色をつけました。

\begin{scope}   %ここから
\clip (-4,-2.5)rectangle(4,2.5) (-1,0) circle(2) ;
\fill[red ,opacity=0.5] (-4,-2.5)rectangle(4,2.5) (1,0) circle(2);
\end{scope}   %ここまで

\( \overline{A} \cup \overline{B} = \overline{A \cap B} \)

これが一番面倒です。円Aを除いてrectangle に色を塗ります。
次に円Aだけを\clipして、円Bを除いてrectangle に色を塗ります。すなわち、円Aの中だけで、円Bを除いて塗るというわけです。2つの色付き図形を合体していることになります。もっと短く描ける方法があるかもしれませんが、思いつきませんでした。

\begin{scope}   %ここから
\fill[red ,opacity=0.5](-4,-2.5)rectangle(4,2.5) (-1,0) circle(2) ;
\clip (-1,0) circle(2);
\fill[red ,opacity=0.5] (-4,-2.5)rectangle(4,2.5) (1,0) circle(2);
\end{scope}   %ここまで

以下のサイトが勉強になりました。
https://tikz.org/examples/chapter-07-filling-and-clipping/

目次