tikz 中集合的绘图差异

tikz 中集合的绘图差异

下图显示$A\cup C$

集合的并集

B我怎样才能绘制逆图,也就是说,怎样填充不在A或中的部分C $B - (A\cup C)$,而保留AC不填充?

如果有帮助的话,下面是制作所示图片的代码:

\begin{tikzpicture}
  \filldraw[fill=lightgray] (0, 0) circle (1) {};
  \filldraw[fill=lightgray] (3.2, 0) circle (1) {};
  \draw (1.6, 0) circle (1) {};
  \node at (0, 0) {A};
  \node at (1.6, 0) {B};
  \node at (3.2, 0) {C};
\end{tikzpicture}

答案1

用白色填充 A 和 C 的不便之处在于,如果背景有颜色,则会看起来很糟糕。

为了避免这种情况并保持 A 和 C 透明,您可以使用even odd rule\clip

奇偶规则和剪辑

\documentclass[tikz,border=3.14mm]{standalone}

\begin{document}
    \begin{tikzpicture}
        \def\A{(0, 0) circle (1)}
        \def\B{(1.6, 0) circle (1)}
        \def\C{(3.2, 0) circle (1)}
        
        \begin{scope}
            \clip \B;
            \fill[lightgray,even odd rule] \A \B \C;
        \end{scope}
        
        \draw \A node {A} \B node {B} \C node {C};
    \end{tikzpicture}
\end{document}

答案2

解决方案:先用和填充圆圈的B后面,并A在和的顶部用白色填充,然后在顶部C画一个圆圈以获得其边缘:B

\begin{tikzpicture}
  \filldraw[fill=lightgray] (0, 0) circle (1) {};
  \filldraw[fill=lightgray] (3.2, 0) circle (1) {};
  \draw (1.6, 0) circle (1) {};
  \node at (0, 0) {A};
  \node at (1.6, 0) {B};
  \node at (3.2, 0) {C};

  \filldraw[fill=lightgray] (8.6, 0) circle (1) {};
  \filldraw[fill=white] (7, 0) circle (1) {};
  \filldraw[fill=white] (10.2, 0) circle (1) {};
  \draw (8.6, 0) circle (1) {};
  \node at (7, 0) {A};
  \node at (8.6, 0) {B};
  \node at (10.2, 0) {C};
\end{tikzpicture}

统一与差异

答案3

以下是@Sandy G 的便宜又好的方法的一些代码(已删除!不知道为什么^^)

在此处输入图片描述

\documentclass[tikz,border=5mm]{standalone}
\pagecolor{yellow!50}
\begin{document}
\begin{tikzpicture}
\def\a{1.6} 
\fill[cyan!50] (\a,0) circle(1);
\draw[fill=white] (0,0) circle(1) (2*\a,0) circle(1);
\draw (\a,0) circle(1);
\path (0,0) node {$A$} (\a,0) node {$B$} (2*\a,0) node {$C$};
\end{tikzpicture}
\end{document}

以及 Asymptote 的翻译

在此处输入图片描述

// http://asymptote.ualberta.ca/
unitsize(1cm);
real a=1.6;
path p=unitcircle;

fill(shift(a,0)*p,magenta+white);
filldraw(p^^shift(2a,0)*p,white);
draw(shift(a,0)*p);

label("$A$"); label("$B$",(a,0)); label("$C$",(2a,0));

shipout(bbox(5mm,Fill(yellow+white)));

相关内容