BEARBEITEN

BEARBEITEN

Ich verwende das TikZ-Paket, um eine Menge komplexer Zahlen anzuzeigen, wobei die gewünschten Zahlen im äußeren Teil eines Kreises mit Radius 2 liegen und der Kreis mit Radius 1 nicht in der Menge enthalten ist: Bildbeschreibung hier eingeben

Ich möchte, dass der innere Kreis weiß ist und die Achsen vollständig sichtbar sind, weiß aber nicht, wie das geht. Ich verwende zwei Kreise mit halbtransparenten Füllungen. Gibt es eine Möglichkeit, nur den äußeren Teil auszufüllen? Relevanter Code unten.

(Hier habe ich den größten Teil des Codes her:Zeichnen eines Kreises in der komplexen Ebene.)

\begin{tikzpicture}
    \begin{scope}[thick,font=\scriptsize][set layers]
    \draw [->] (-4,0) -- (4,0) node [above left]  {$\Re\{z\}$};
    \draw [->] (0,-4) -- (0,4) node [below right] {$\Im\{z\}$};
    \iffalse% Single
    \draw (1,-3pt) -- (1,3pt)   node [above] {$1$};
    \draw (-1,-3pt) -- (-1,3pt) node [above] {$-1$};
    \draw (-3pt,1) -- (3pt,1)   node [right] {$i$};
    \draw (-3pt,-1) -- (3pt,-1) node [right] {$-i$};
    \else% Multiple
    \foreach \n in {-3,...,-1,1,2,...,3}{%
        \draw (\n,-3pt) -- (\n,3pt)   node [above] {$\n$};
        \draw (-3pt,\n) -- (3pt,\n)   node [right] {$\n i$};
    }
    \fi
    \end{scope}
    \draw[solid] (0,-1) circle (1);
    \draw[solid] (0,-1) circle (2);
    \path [draw=none,fill=gray, fill opacity = 0.1] (0,-1) circle (2);
    \path [draw=none,fill=white, fill opacity = 0.7] (0,-1) circle (1);
    \node [below right,black] at (1.2,1.2) {$A=\{z\in\mathbb{C}:1\leq|z-(-i)|\leq2\}$};
\end{tikzpicture}

Antwort1

Sie können eine andere Füllregel verwenden, even odd ruledie jeden geraden geschlossenen Bereich ausfüllt.

Wenn Sie also anstelle von zwei einzelnen Kreisen die folgende Linie verwenden, erhalten Sie eine Donut-Füllung:

\path [draw=none,fill=gray, fill opacity = 0.1,even odd rule] (0,-1) circle (2) (0,-1) circle (1);

Bildbeschreibung hier eingeben

Antwort2

In diesem speziellen Fall können Sie einfach die Zeichenreihenfolge ändern, d. h. zuerst die Kreise zeichnen:

\documentclass[tikz]{standalone}
\usepackage{amsfonts}
\begin{document}
\begin{tikzpicture}
        \path [draw=none,fill=gray, fill opacity = 0.1] (0,-1) circle (2);
    \path [draw=none,fill=white] (0,-1) circle (1);
    \begin{scope}[thick,font=\scriptsize][set layers]
    \draw [->] (-4,0) -- (4,0) node [above left]  {$\Re\{z\}$};
    \draw [->] (0,-4) -- (0,4) node [below right] {$\Im\{z\}$};
    \iffalse% Single
    \draw (1,-3pt) -- (1,3pt)   node [above] {$1$};
    \draw (-1,-3pt) -- (-1,3pt) node [above] {$-1$};
    \draw (-3pt,1) -- (3pt,1)   node [right] {$i$};
    \draw (-3pt,-1) -- (3pt,-1) node [right] {$-i$};
    \else% Multiple
    \foreach \n in {-3,...,-1,1,2,...,3}{%
        \draw (\n,-3pt) -- (\n,3pt)   node [above] {$\n$};
        \draw (-3pt,\n) -- (3pt,\n)   node [right] {$\n i$};
    }
    \fi
    \end{scope}
    \draw[solid] (0,-1) circle (1);
    \draw[solid] (0,-1) circle (2);
%    \path [draw=none,fill=gray, fill opacity = 0.1] (0,-1) circle (2);
%    \path [draw=none,fill=white, fill opacity = 0.7] (0,-1) circle (1);
    \node [below right,black] at (1.2,1.2) {$A=\{z\in\mathbb{C}:1\leq|z-(-i)|\leq2\}$};
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Antwort3

Verwenden Sie die „Gerade-Ungerade-Regel“:

\documentclass[tikz]{standalone}
\usepackage{amsfonts}
\begin{document}
\begin{tikzpicture}
    \begin{scope}[thick,font=\scriptsize][set layers]
    \draw [->] (-4,0) -- (4,0) node [above left]  {$\Re\{z\}$};
    \draw [->] (0,-4) -- (0,4) node [below right] {$\Im\{z\}$};
    \iffalse% Single
    \draw (1,-3pt) -- (1,3pt)   node [above] {$1$};
    \draw (-1,-3pt) -- (-1,3pt) node [above] {$-1$};
    \draw (-3pt,1) -- (3pt,1)   node [right] {$i$};
    \draw (-3pt,-1) -- (3pt,-1) node [right] {$-i$};
    \else% Multiple
    \foreach \n in {-3,...,-1,1,2,...,3}{%
        \draw (\n,-3pt) -- (\n,3pt)   node [above] {$\n$};
        \draw (-3pt,\n) -- (3pt,\n)   node [right] {$\n i$};
    }
    \fi
    \end{scope}
    \draw[solid] (0,-1) circle (1);
    \draw[solid] (0,-1) circle (2);
    \path [draw=none, fill=gray, even odd rule, fill opacity = 0.1] (0,-1) circle (2) (0,-1) circle (1);
    \node [below right,black] at (1.2,1.2) {$A=\{z\in\mathbb{C}:1\leq|z-(-i)|\leq2\}$};
\end{tikzpicture}
\end{document}

gerade ungerade Füllung

BEARBEITEN

Da percusse mit der Gerade-Ungerade-Regel schneller war (aber, wie ich anmerke, kein vollständiges MWE lieferte), ist hier eine Lösung, die Sie verwenden können, wenn Sie den inneren Kreis ausfüllen möchten, die Achsen aber trotzdem oben haben möchten. Diese Lösung verwendet die backgroundsBibliothek, um den inneren Kreis auszufüllenhinterden Rest des Bildes, so dass die Achsen oben bleiben.

\documentclass[tikz]{standalone}
\usepackage{amsfonts}
\usetikzlibrary{backgrounds}
\begin{document}
  \begin{tikzpicture}
    \begin{scope}[thick,font=\scriptsize][set layers]
      \draw [->] (-4,0) -- (4,0) node [above left]  {$\Re\{z\}$};
      \draw [->] (0,-4) -- (0,4) node [below right] {$\Im\{z\}$};
      \iffalse % Single
      \draw (1,-3pt) -- (1,3pt)   node [above] {$1$};
      \draw (-1,-3pt) -- (-1,3pt) node [above] {$-1$};
      \draw (-3pt,1) -- (3pt,1)   node [right] {$i$};
      \draw (-3pt,-1) -- (3pt,-1) node [right] {$-i$};
      \else% Multiple
      \foreach \n in {-3,...,-1,1,2,...,3}{%
        \draw (\n,-3pt) -- (\n,3pt)   node [above] {$\n$};
        \draw (-3pt,\n) -- (3pt,\n)   node [right] {$\n i$};
      }
      \fi
    \end{scope}
    \draw[solid] (0,-1) circle (1);
    \draw[solid] (0,-1) circle (2);
    \path [fill=gray, fill opacity = 0.1] (0,-1) circle (2);
    \begin{scope}[on background layer]
        \path [fill=white, fill opacity=.7] (0,-1) circle (1);
    \end{scope}
    \node [below right,black] at (1.2,1.2) {$A=\{z\in\mathbb{C}:1\leq|z-(-i)|\leq2\}$};
  \end{tikzpicture}
\end{document}

Beantworten Sie eine andere Frage mithilfe der Hintergrundbibliothek

Antwort4

Erledigt mit MetaPost (über LuaLaTeX), für wen es interessant sein könnte.

Mithilfe des Metafun-Formats für die transparente Füllung:

fill ring withcolor transparent(1, 0.1, \mpcolor{gray});

Der Ring selbst entsteht durch das Anhängen eines der Kreise an den umgekehrten anderen Kreis:

ring = circle1 -- reverse circle2 -- cycle;

(Eine einfachere und schnellere Methode wäre natürlich gewesen, den größten Kreis auszufüllen und den kleinsten leer zu lassen, aber ich fand es interessant, diesen Ringpfad zu erstellen und ihn direkt auszufüllen.)

Der vollständige Code:

\documentclass[12pt]{standalone}
\usepackage{amssymb, xcolor}
\usepackage{luamplib}
    \mplibsetformat{metafun}
    \mplibtextextlabel{enable}
\begin{document}
\begin{mplibcode}
u = 1.5cm; xmax = 3.9 = ymax = -ymin = -xmin; len = 6bp;
path circle[], ring;
circle1 = fullcircle scaled 2u shifted (0, -u);
circle2 = fullcircle scaled 4u shifted (0, -u);
ring = circle1 -- reverse circle2 -- cycle;
labeloffset := 6bp;
beginfig(1);
    for i = ceiling(xmin) upto floor(xmax):
        draw (i*u, -0.5len) -- (i*u, 0.5len); 
        if i <> 0: label.top("$" & decimal i & "$", (i*u, 0)); fi
    endfor
    for j = ceiling(ymin) upto floor(ymax):
        draw (-0.5len, j*u) -- (0.5len, j*u); 
        if j <> 0: label.rt("$" & decimal j & "i$", (0, j*u)); fi
    endfor
    drawarrow (xmin*u, 0) -- (xmax*u, 0); label.top("$\Re\{ z \}$", (xmax*u, 0));
    drawarrow (0, ymin*u) -- (0, ymax*u); label.rt("$\Im\{ z \}$", (0, ymax*u));
    fill ring withcolor transparent(1, 0.1, \mpcolor{gray});
    for i = 1,2: draw circle[i]; endfor
    label.urt("$A = \{z \in \mathbb{C}: 1 \leqslant |z-(-i)| \leqslant2 \}$", 
        point 1.5 of circle2);
endfig;
\end{mplibcode}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen