Como preencher a área entre n pontos de interseção no TikZ

Como preencher a área entre n pontos de interseção no TikZ

Dadas duas formas que se cruzam, como podemos preencher a área comum a elas no TikZ (ou seja, a área entre seus pontos de interseção).

Aqui, even odd rulepode não funcionar, pois não se trata de preenchimento alternativo, mas de pontos de interseção.

Observe que para determinar os pontos de intersecção, estou usando a intersectionsbiblioteca.

No MWE abaixo, como preencho a área entre Ce C':

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{intersections,through}
\begin{document}
\begin{tikzpicture}
  \coordinate (A) at (0,0);
  \coordinate (B) at (1.25,0.25);


  \node (E) [name path=E,draw,circle through=(B)] at (A) {};
  \node (F) [name path=F,draw,circle through=(A)] at (B) {};

  \path [name intersections={of=E and F, by={[label=above:$C$]C,[label=below:$C'$]C'}}];


\end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

Responder1

A área comum é obtida recortando um dos círculos e preenchendo o outro.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{intersections,through}
\makeatletter % from https://tex.stackexchange.com/a/127045/121799
\tikzset{use path/.code=\tikz@addmode{\pgfsyssoftpath@setcurrentpath#1}}
\makeatother
\begin{document}
\begin{tikzpicture}
  \coordinate (A) at (0,0);
  \coordinate (B) at (1.25,0.25);


  \node (E) [name path=E,draw,circle through=(B),save path=\pathA] at (A) {};
  \node (F) [name path=F,draw,circle through=(A),save path=\pathB] at (B) {};
  \begin{scope}
  \clip[use path=\pathA];
  \fill[blue,use path=\pathB];
  \end{scope}

  \path [name intersections={of=E and F, by={[label=above:$C$]C,[label=below:$C'$]C'}}];


\end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

Caso você esteja preocupado com o fato de o contorno do círculo ficar parcialmente pintado, use backgrounds.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{intersections,through,backgrounds}
\makeatletter % from https://tex.stackexchange.com/a/127045/121799
\tikzset{use path/.code=\tikz@addmode{\pgfsyssoftpath@setcurrentpath#1}}
\makeatother
\begin{document}
\begin{tikzpicture}
  \coordinate (A) at (0,0);
  \coordinate (B) at (1.25,0.25);


  \node (E) [name path=E,draw,circle through=(B),save path=\pathA] at (A) {};
  \node (F) [name path=F,draw,circle through=(A),save path=\pathB] at (B) {};
  \begin{scope}[on background layer]
  \clip[use path=\pathA];
  \fill[blue,use path=\pathB];
  \end{scope}

  \path [name intersections={of=E and F, by={[label=above:$C$]C,[label=below:$C'$]C'}}];


\end{tikzpicture}
\end{document}

Você sempre pode preencher segmentos de interseção. (Você pode combinar isso com o plano de fundo acima.)

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\usepgfplotslibrary{fillbetween}
\pgfplotsset{compat=1.16}
\usetikzlibrary{through}
\begin{document}
\begin{tikzpicture}
  \coordinate (A) at (0,0);
  \coordinate (B) at (1.25,0.25);


  \node (E) [name path=E,draw,circle through=(B)] at (A) {};
  \node (F) [name path=F,draw,circle through=(A)] at (B) {};

  \path [name intersections={of=E and F, by={[label=above:$C$]C,[label=below:$C'$]C'}}];

  \path[%draw,red,thick,
  fill=blue,
  intersection segments={of=E and F,sequence={L1--R2--L3}}];
\end{tikzpicture}
\end{document}

(Mesma saída acima.)

A determinação analítica dos arcos é outra possibilidade.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{intersections,through,calc}
\begin{document}
\begin{tikzpicture}
  \coordinate (A) at (0,0);
  \coordinate (B) at (1.25,0.25);


  \node (E) [name path=E,draw,circle through=(B)] at (A) {};
  \node (F) [name path=F,draw,circle through=(A)] at (B) {};

  \path [name intersections={of=E and F, by={[label=above:$C$]C,[label=below:$C'$]C'}}];
  \path[fill=blue] let \p1=($(A.center)-(B.center)$),\p2=($(C.center)-(A.center)$),
  \p3=($(C'.center)-(A.center)$),\p4=($(C.center)-(B.center)$),
  \p5=($(C'.center)-(B.center)$),
  \n1={veclen(\x2,\y2)}, % radius A
  \n2={veclen(\x4,\y4)}, % radius B
  \n3={atan2(\y2,\x2)}, % angle A 1
  \n4={atan2(\y3,\x3)}, % angle A 2
  \n5={atan2(\y4,\x4)}, % angle B 1
  \n6={atan2(\y5,\x5)} % angle B 2
  in (C) arc(\n3:\n4:\n1)  arc(\n6:\n5-360:\n2);

\end{tikzpicture}
\end{document}

informação relacionada