用 TikZ 對四個圓的交點著色

用 TikZ 對四個圓的交點著色

我想選擇性地填滿四個圓的交集,如下所示。

我想要的是

我能夠正確地製作一些交叉點,但無法弄清楚如何製作其餘的交叉點。

這是 MWE 及其結果。

 \documentclass[10pt]{article}
 \usepackage{pgf,tikz}
 \pagestyle{empty}
 \begin{document}
 \begin{tikzpicture}
 \clip(0,0) rectangle (4.2,3);
 \fill [fill=blue] (1.64,1.22) circle (1.16cm);
 \fill[fill=white] (1.34,1.11) circle (0.53cm);
 \fill[fill=blue](2.50,1.71) circle (1.18cm);
 \fill [fill=blue](1.02,1.99) circle (0.82cm);

 \clip [](1.02,1.99) circle (0.82cm);
 \fill [fill=yellow]  (1.34,1.11) circle (0.53cm);


 \clip [] (2.50,1.71) circle (1.18cm);
 \fill [fill=green] (1.34,1.11) circle (0.53cm);

 \clip [] (1.02,1.99) circle (0.82cm);
 \fill [fill=white] (2.50,1.71) circle (1.18cm);

 \clip [] (1.64,1.22) circle (1.16cm);
 \fill [fill=red] (2.50,1.71) circle (1.18cm);

 \clip [] (1.34,1.11) circle (0.53cm);
 \fill [fill=white] (1.02,1.99) circle (0.82cm);


 \clip [] (1.34,1.11) circle (0.53cm);
 \fill [fill=black] (2.50,1.71) circle (1.18cm);
 \end{tikzpicture}
 \end{document}

任何其他可以更有效或更輕鬆地繪製它的提示都將受到歡迎。

我想要的是

答案1

這會以不同的方式填充交叉點。從 BW 圖片中判斷您到底想要實現什麼有點困難,對於可能的誤解,我提前表示歉意。另請注意,如果您只想將給定剪輯應用於某些路徑/填充,則需要將其放入範圍中。以某種方式儲存重複路徑可以說是有利的,一種可能性是insert path

\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
\begin{tikzpicture}[my circ/.style={insert path={
\ifcase#1
\or
(1.64,1.22) circle (1.16cm)
\or
(2.50,1.71) circle (1.18cm) 
\or
(1.02,1.99) circle (0.82cm)
\or
(1.34,1.11) circle (0.53cm)
\fi}}]
 \clip(0,0) rectangle (4.2,3);
 \fill[blue,my circ/.list={1,2,3}];
 \fill[white,my circ=4];
 \foreach \Y/\Z in {{1,2}/magenta,{1,3}/magenta,{1,2,3}/yellow,{1,2,4}/green,{1,3,4}/orange,
 {2,3,4}/purple,{2,3}/cyan,{1,2,3}/red}
 {\begin{scope}
  \foreach \X in \Y
   {\clip [my circ=\X];}
   \fill[\Z] (0,0) rectangle (4.2,3);
 \end{scope}}
\end{tikzpicture}
\end{document}

在此輸入影像描述

至於你澄清的問題:使用even odd rule.

\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
\begin{tikzpicture}[my circ/.style={insert path={
\ifcase#1
\or
(1.64,1.22) circle (1.16cm)
\or
(2.50,1.71) circle (1.18cm) 
\or
(1.02,1.99) circle (0.82cm)
\or
(1.34,1.11) circle (0.53cm)
\fi}}]
\fill[even odd rule,my circ/.list={1,2,3,4}];
\end{tikzpicture}
\end{document}

在此輸入影像描述

答案2

看看@Raaja 發布的提示,我發現不使用scope會導致剪輯無法渲染。透過每個剪輯的範圍,我能夠實現所需的構造。儘管該解決方案並不優雅或高效,但也許可以使其變得更容易/更好。就這樣吧。

\documentclass{article}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
\path
(1.64,1.22) coordinate (C)
(1.34,1.11) coordinate (A)
(2.50,1.71) coordinate (B)
(1.02,1.99) coordinate (D);
\fill [fill=black](B) circle (1.18cm);
\fill [fill=black](C) circle (1.16cm);
\fill [fill=white](A) circle (0.53cm);
\fill [fill=black](D) circle (0.82cm);


\begin{scope}
\draw[clip] (B) circle (1.18cm);
 \fill[white] (C) circle (1.16cm);
\end{scope}

\begin{scope}
\draw[clip] (A) circle (0.53cm);
 \fill[black] (B) circle (1.18cm);
\end{scope}

\begin{scope}%top white corner
\draw[clip] (D) circle (0.82cm);
 \fill[white] (B) circle (1.18cm);    
\end{scope}



\begin{scope}
\draw[clip] (D) circle (0.82cm);
\fill[white] (C) circle (1.16cm);    
\end{scope}    

\begin{scope}
\draw[clip] (A) circle (0.53cm);
\fill [black] (D) circle (0.82cm);    
\end{scope}    

\begin{scope}%
\draw[clip] (B) circle (1.18cm);
\draw[clip] (C) circle (1.16cm);
 \fill[black] (D) circle (0.82cm);    
 \end{scope}


\begin{scope}% centre white triangle
\draw[clip] (B) circle (1.18cm);
\draw[clip] (C) circle (1.16cm);
\draw[clip] (A) circle (0.53cm);
\fill[white] (D) circle (0.82cm);    
\end{scope}
\end{tikzpicture}
\end{document} 

儘管使用黑色以外的任何其他顏色,但會產生帶有黑色輪廓的圖像,但我無法將其刪除。clip似乎不允許使用任何選項。

在此輸入影像描述

相關內容