편집하다

편집하다

나는 TikZ 패키지를 사용하여 내가 원하는 숫자가 반지름 2인 원의 바깥 부분에 있고 반지름 1인 원이 세트에 없는 복소수 세트를 표시합니다. 여기에 이미지 설명을 입력하세요

내부 원을 흰색으로 만들고 축이 완전히 표시되도록 하고 싶지만 방법을 알 수 없습니다. 저는 반투명하게 채워진 두 개의 원을 사용하고 있습니다. 바깥쪽 부분만 채우는 방법은 없나요? 아래 관련 코드.

(여기서 대부분의 코드를 얻었습니다.복소 평면에 원을 그립니다.)

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

답변1

even odd rule모든 짝수 닫힌 영역을 채우는 다른 채우기 규칙을 사용할 수 있습니다 .

따라서 두 개의 서로 다른 원 대신 다음 줄을 사용하면 도넛 채우기가 생성됩니다.

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

여기에 이미지 설명을 입력하세요

답변2

이 특별한 경우에는 간단히 그리기 순서를 변경할 수 있습니다. 즉, 원을 먼저 그릴 수 있습니다.

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

여기에 이미지 설명을 입력하세요

답변3

'짝수 홀수 규칙'을 사용하십시오.

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

심지어 이상한 채우기

편집하다

짝수 규칙 솔루션을 사용하면 타악기가 더 빠르기 때문에(그러나 완전한 MWE를 제공하지는 않았음) 내부 원을 채우고 싶지만 여전히 축이 맨 위에 있는 경우 사용할 수 있는 솔루션이 있습니다. 이 솔루션은 backgrounds라이브러리를 사용하여 내부 원을 채웁니다.뒤에그림의 나머지 부분을 축이 위쪽에 유지되도록 합니다.

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

배경 라이브러리를 사용하여 다른 질문에 답하기

답변4

관심을 가질 만한 MetaPost(LuaLaTeX를 통해)를 완료했습니다.

투명한 채우기를 위한 Metafun 형식의 도움으로:

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

링 자체는 원 중 하나를 반전된 다른 원에 추가하여 생성됩니다.

ring = circle1 -- reverse circle2 -- cycle;

(물론 더 간단하고 빠른 방법은 가장 큰 원을 채우고 가장 작은 원을 채우는 것이었지만 이 링 경로를 만들고 직접 채우는 것이 흥미로웠습니다.)

전체 코드:

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

여기에 이미지 설명을 입력하세요

관련 정보