Ellipsen mit unterschiedlicher Farbgebung für ihre Schnittpunkte in Tikz zeichnen?

Ellipsen mit unterschiedlicher Farbgebung für ihre Schnittpunkte in Tikz zeichnen?

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}

Bildbeschreibung hier eingeben

BEARBEITEN:als Antwort auf Ihre Anfrage nach einem Kommentar mit drei Auslassungspunkten

Die Idee bleibt dieselbe:

  1. Füllen Sie Ihre Ellipsen
  2. Füllen Sie Ihre Kreuzungen
  3. 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}

Bildbeschreibung hier eingeben

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 \tikzfillbetweenBefehl aus pgfplot's fillbetweender 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}

Bildbeschreibung hier eingeben

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}

Bildbeschreibung hier eingeben

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 90Teil. 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 buildcycleMakros 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 90die 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}

Bildbeschreibung hier eingeben

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}

Bildbeschreibung hier eingeben

verwandte Informationen