EDITAR

EDITAR

Estoy usando el paquete TikZ para mostrar un conjunto de números complejos donde los que quiero están en la parte exterior de un círculo con radio 2, y donde el círculo con radio 1 no está en el conjunto: ingrese la descripción de la imagen aquí

Quiero que el círculo interior sea blanco, con los ejes visibles por completo, pero no puedo descubrir cómo. Estoy usando dos círculos con rellenos semitransparentes. ¿Hay alguna manera de llenar solo la parte exterior? Código relevante a continuación.

(Aquí es donde obtuve la mayor parte del código:Dibujar un círculo en el plano complejo.)

\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}

Respuesta1

Puede utilizar una regla de relleno diferente que se llama even odd rule"llena cada región cerrada par".

Entonces, si usa la siguiente línea en lugar de dos círculos distintos, obtendrá un relleno de dona;

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

ingrese la descripción de la imagen aquí

Respuesta2

En este caso particular, puedes simplemente cambiar el orden de dibujo, es decir, dibujar los círculos primero:

\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}

ingrese la descripción de la imagen aquí

Respuesta3

Utilice la 'regla par impar':

\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}

relleno incluso impar

EDITAR

Dado que la percusión fue más rápida con la solución de regla par-impar (pero observo que no proporcionó un MWE completo), aquí hay una solución que puede usar si desea que el círculo interno se llene pero aún desea que los ejes estén en la parte superior. Esta solución utiliza la backgroundsbiblioteca para llenar el círculo interior.detrásel resto de la imagen, de modo que los ejes queden en la parte superior.

\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}

responder una pregunta diferente usando la biblioteca de fondos

Respuesta4

Hecho con MetaPost (vía LuaLaTeX), para quien pueda interesar.

Con ayuda del formato Metafun para el relleno transparente:

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

El anillo en sí se crea añadiendo uno de los círculos al otro círculo invertido:

ring = circle1 -- reverse circle2 -- cycle;

(Por supuesto, un método más simple y rápido habría sido llenar el círculo más grande y vaciar el más pequeño, pero me pareció interesante crear este camino circular y llenarlo directamente).

El código completo:

\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}

ingrese la descripción de la imagen aquí

información relacionada