
나는 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}