Wie färbe ich den Schnittpunkt zweier Ellipsen in einer anderen Farbe? Beispielsweise sollten die Ellipsen selbst gelb und ihr Schnittpunkt rot gefärbt sein. Mein Code zum Zeichnen von Ellipsen ist unten angegeben
\draw (-4,0) ellipse (8 and 3);
\draw (8,0) ellipse (8 and 3);
UPDATE: In den Kommentaren zu den einzelnen Antworten habe ich darum gebeten, es für drei Auslassungspunkte anzuzeigen.
Antwort1
Wie Sie in sehen könnendieseBeispiele und inSo zeichnen Sie Venn-Diagramme (insbesondere Komplemente) in LaTeX, es ist ziemlich einfach, solche Ellipsen zu zeichnen, solange eine Ihrer Füllfarben Weiß ist.
Wenn Sie zwei verschiedene Füllfarben wünschen und die in den vorherigen Beispielen beschriebenen Methoden verwenden, achten Sie darauf, zuerst die Ellipse zu füllen und sie anschließend zu zeichnen:
\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}
BEARBEITEN:als Antwort auf Ihre Anfrage nach einem Kommentar mit drei Auslassungspunkten
Die Idee bleibt dieselbe:
- Füllen Sie Ihre Ellipsen
- Füllen Sie Ihre Kreuzungen
- zeichne deine Ellipsen
Das gibt Ihnen also:
\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}
Wenn Sie möchten, dass alle Kreuzungen rot sind, ändern Sie die Farben Blau, Grün und Grau in Rot.
Wenn Sie gedrehte Ellipsen wünschen, verwenden Sie
\def\firstellipse{(-4,0) ellipse [x radius=8, y radius=3, rotate=45]}
Antwort2
Eine weitere Option mit \tikzfillbetween
Befehl aus pgfplot's
fillbetween
der Bibliothek.
\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}
Antwort3
Sie können zunächst eine Ellipse mit roter Farbe füllen und dann (mit Füllen) zwei Ellipsen zeichnen miteven 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}
Antwort4
Hier ein Versuch mitMetaPost(in einem LuaLaTeX-Programm enthalten), für diejenigen, die daran interessiert sind.
Beachten Sie, dass es auch mit MetaPost nicht einfach ist, diese Art von Schnittpunkt zu zeichnen. Wenn Sie sich die Definition der ersten Ellipse im folgenden Programm ansehen,
fullcircle rotated 90 xscaled 9cm yscaled 3cm shifted (3.2cm, 0);
dann beachte den rotated 90
Teil. Es sieht seltsam aus, da es bedeutet, dass eine Rotation auf einen Kreis angewendet wird, aber wenn du diesen Teil unterdrückst,Nichtswürde überhaupt funktionieren. Die Erklärung liegt in den Feinheiten des buildcycle
Makros von MetaPost (dasselbe wieAsymptote's, übrigens), die ausführlich besprochen wurdenin diesem Punkt.
AKTUALISIERENDa die zweite Ellipse nun anders als zuvor definiert wird (d. h. jetzt durch Drehen der ersten), ist der Teil in der Definition der ersten Ellipse unnötig. Ich habe den Code entsprechend vereinfacht. Dennoch ist es gut , bei der Bewältigung dieser Art von Aufgabe rotated 90
die Einschränkung des Makros im Hinterkopf zu behalten .buildcycle
\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}
Jetzt mit drei Ellipsen, wie im obigen Beispiel von 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}