¿Cómo coloreo la intersección de dos elipses en diferentes colores? Por ejemplo, las elipses deberían estar coloreadas en amarillo y su intersección en rojo. Mi código para dibujar elipses se proporciona a continuación.
\draw (-4,0) ellipse (8 and 3);
\draw (8,0) ellipse (8 and 3);
ACTUALIZACIÓN: En los comentarios a las respuestas individuales, solicité mostrarlo en tres elipses.
Respuesta1
Como puedes ver enestosejemplos y enCómo dibujar diagramas de Venn (especialmente: complementos) en LaTeX, es bastante fácil dibujar tales elipses siempre que uno de los colores de relleno sea blanco.
Cuando quieras 2 colores de relleno diferentes y utilices los métodos descritos en los ejemplos anteriores, asegúrate de rellenar la elipse primero y dibujarlas después:
\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\def\firstellipse{(-4,0) ellipse (8 and 3)}
\def\secondellipse{(8,0) ellipse (8 and 3)}
% colour ellipses
\fill[yellow] \firstellipse \secondellipse;
% colour intersection
\begin{scope}
\clip \firstellipse;
\fill[red] \secondellipse;
\end{scope}
% outiline of ellipses
\draw \firstellipse \secondellipse;
\end{tikzpicture}
\end{document}
EDITAR:en respuesta a su solicitud de comentario de tres elipses
La idea sigue siendo la misma:
- llena tus elipses
- llena tus intersecciones
- dibuja tus elipses
Entonces esto te da:
\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\def\firstellipse{(-4,0) ellipse [x radius=8, y radius=3, rotate=150]}
\def\secondellipse{(8,0) ellipse [x radius=8, y radius=3, rotate=30]}
\def\thirdellipse{(2,-10.5) ellipse [x radius=8, y radius=3, rotate=90]}
\def\boundingbox{(-12,-16) rectangle (16,3)}
% fill ellipses
\fill[yellow] \firstellipse \secondellipse \thirdellipse;
% fill intersections
% intersection of second and third
\begin{scope}
\clip \boundingbox \firstellipse;
\clip \secondellipse;
\fill[blue] \thirdellipse;
\end{scope}
% intersection of first and third
\begin{scope}
\clip \boundingbox \secondellipse;
\clip \firstellipse;
\fill[green] \thirdellipse;
\end{scope}
% intersection of first and second
\begin{scope}
\clip \boundingbox \thirdellipse;
\clip \firstellipse;
\fill[gray] \secondellipse;
\end{scope}
% intersection of first, second and third
\begin{scope}
\clip \firstellipse;
\clip \secondellipse;
\clip \thirdellipse;
\fill[red] \boundingbox;
\end{scope}
% outline of ellipses
\draw \firstellipse \secondellipse \thirdellipse;
\end{tikzpicture}
\end{document}
Si quieres que todas las intersecciones sean rojas, cambia los colores azul, verde y gris a rojo.
Si quieres elipses rotadas usa
\def\firstellipse{(-4,0) ellipse [x radius=8, y radius=3, rotate=45]}
Respuesta2
Otra opción con \tikzfillbetween
comando desde pgfplot's
fillbetween
la biblioteca.
\documentclass[tikz,border=2mm]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{fillbetween}
\begin{document}
\begin{tikzpicture}
\draw[name path=A, fill=red] (-4,0) ellipse (8 and 3);
\draw[name path=B] (8,0) ellipse (8 and 3);
\tikzfillbetween[of=A and B]{yellow};
\end{tikzpicture}
\end{document}
Respuesta3
Primero puedes rellenar una elipse con color rojo y dibujar (con relleno) dos elipses usandoeven odd rule
\documentclass[tikz,border=2mm]{standalone}
\begin{document}
\begin{tikzpicture}
\fill[red] (-4,0) ellipse (8 and 3);
\draw[fill=yellow,even odd rule,line width=1pt] (-4,0) ellipse (8 and 3)
(8,0) ellipse (8 and 3);
\end{tikzpicture}
\end{document}
Respuesta4
He aquí un intento conMetapublicación(incluido en un programa LuaLaTeX), para aquellos que estén interesados en él.
Tenga en cuenta que tampoco es sencillo dibujar este tipo de intersección con MetaPost. Si observa la definición de la primera elipse en el programa siguiente,
fullcircle rotated 90 xscaled 9cm yscaled 3cm shifted (3.2cm, 0);
Entonces nota la rotated 90
pieza. Parece extraño ya que significa que se aplica una rotación a un círculo, pero si suprimes esta parte,nadafuncionaría en absoluto. La explicación está dentro de los entresijos de la buildcycle
macro de MetaPost (la misma queAsíntota's, por cierto), que fueron discutidos en detalleen este tema.
ACTUALIZARDado que la segunda elipse ahora está definida de una manera diferente que antes (es decir, ahora girando la primera), hace rotated 90
innecesaria la parte en la definición de la primera elipse. He simplificado el código en consecuencia. Aún así, es bueno tener en cuenta la limitación de la buildcycle
macro al abordar este tipo de tareas.
\documentclass{standalone}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
color yellow; yellow = red+green;
def erase_and_fill expr pat = unfill pat; fill pat enddef;
path fig[];
fig1 = fullcircle xscaled 9cm yscaled 3cm shifted (3.2cm, 0);
fig2 = fig1 rotated 180;
beginfig(1);
for i = 1, 2: erase_and_fill fig[i] withcolor yellow; endfor
erase_and_fill buildcycle(fig1, fig2) withcolor red;
for i = 1, 2: draw fig[i]; endfor
endfig;
\end{mplibcode}
\end{document}
Ahora con tres elipses, como en el ejemplo anterior de Maarten DHondt:
\documentclass{standalone}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
color yellow; yellow = red+green;
def erase_and_fill expr pat = unfill pat; fill pat enddef;
path fig[];
fig1 = fullcircle xscaled 9cm yscaled 3cm shifted (4cm, 0) rotated 30;
fig2 = fig1 rotated 120;
fig3 = fig2 rotated 120;
beginfig(1);
for i = 1 upto 3: erase_and_fill fig[i] withcolor yellow; endfor
erase_and_fill buildcycle(fig1, fig2) withcolor 0.7white;
erase_and_fill buildcycle(fig2, fig3) withcolor green;
erase_and_fill buildcycle(fig1, fig3) withcolor blue;
erase_and_fill buildcycle(fig1, fig2, fig3) withcolor red;
for i = 1 upto 3: draw fig[i]; endfor
endfig;
\end{mplibcode}
\end{document}