下图显示$A\cup C$
。
B
我怎样才能绘制逆图,也就是说,怎样填充不在A
或中的部分C
$B - (A\cup C)$
,而保留A
和C
不填充?
如果有帮助的话,下面是制作所示图片的代码:
\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)));