Dadas dos formas que se cruzan, ¿cómo podemos llenar el área común a ellas en TikZ (es decir, el área entre sus puntos de intersección)?
Aquí, even odd rule
es posible que no funcione, ya que no se trata de un relleno alternativo sino de puntos de intersección.
Tenga en cuenta que para determinar los puntos de intersección, estoy usando la intersections
biblioteca.
En el siguiente MWE, ¿cómo lleno el área entre C
y 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}
Respuesta1
El área común se obtiene recortando uno de los círculos y rellenando el otro.
\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}
En caso de que le preocupe el hecho de que el contorno del círculo se sobrepinte parcialmente, utilice 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}
Siempre puedes rellenar segmentos de intersección. (Puedes combinar esto con el fondo anterior).
\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}
(El mismo resultado que el anterior).
La determinación analítica de los arcos es otra posibilidad.
\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}