我正在尝试使用 TikZ 或 Tkz-Euclide 填充以 C 为中心的圆内但以 B 为中心的圆外的区域,但我无法这样做。我刚刚得到了类似问题的帮助我试图利用它来为自己谋利,但无济于事。
\documentclass[10pt]{scrartcl}
\usepackage{tkz-euclide}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\tkzDefPoints{0/0/A, 1/0/B, 2/0/C, 3/0/D, 4/0/E, 5/0/F, 6/0/G}
\tkzDrawCircle[R](B,1cm)
\tkzDrawCircle[R](C,2cm)
\tkzDrawCircle[R](D,3cm)
\tkzDrawPoints(A,B,C,D,E,F,G)
\tkzDrawSegment(A,G)
\tkzLabelPoints[below](B,D,F)
\tkzLabelPoints[left](A)
\tkzLabelPoints[right](G)
\tkzLabelPoints[below right](C,E)
\filldraw[color=gray, opacity=0.5]
(E) arc (0:180:2cm);
\end{tikzpicture}
\end{document}
答案1
我可以写另一条评论,但也许当我使用答案时会更清楚,因为这样我可以添加屏幕截图。正如我在评论中所说,你可以省略大部分坐标。写答案的原因是我想鼓励你使用库来backgrounds
实现这一点。我认为你添加了不透明度,因为你不想删除节点。如果是这种情况,你可以将填充放在背景上。这样你也可以使用全色。这也适用于不错的解决方案由 J. Leon V. 提出。如您所见,标签不会变得模糊。
\documentclass[10pt]{scrartcl}
\usepackage{tikz}
\usepackage{tkz-euclide}
\usetikzlibrary{calc,backgrounds}
\begin{document}
\begin{tikzpicture}
\tkzDefPoints{0/0/A, 1/0/B, 2/0/C, 3/0/D, 4/0/E, 5/0/F, 6/0/G}
\tkzDrawCircle[R](B,1cm)
\tkzDrawCircle[R](C,2cm)
\tkzDrawCircle[R](D,3cm)
\tkzDrawPoints(A,B,C,D,E,F,G)
\tkzDrawSegment(A,G)
\tkzLabelPoints[below](B,D,F)
\tkzLabelPoints[left](A)
\tkzLabelPoints[right](G)
\tkzLabelPoints[below right](C,E)
\begin{scope}[on background layer]
\fill[gray!50] (A) arc(-180:180:2cm) arc(180:-180:1cm) --cycle;
\fill[blue](A) arc(-180:180:3cm) arc(180:-180:2cm) --cycle;
\end{scope}
\end{tikzpicture}
\end{document}
以下仅是上半部分和下半部分的示例。
\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{tkz-euclide}
\usetikzlibrary{calc,backgrounds}
\begin{document}
\begin{tikzpicture}
\tkzDefPoints{0/0/A, 1/0/B, 2/0/C, 3/0/D, 4/0/E, 5/0/F, 6/0/G}
\tkzDrawCircle[R](B,1cm)
\tkzDrawCircle[R](C,2cm)
\tkzDrawCircle[R](D,3cm)
\tkzDrawPoints(A,B,C,D,E,F,G)
\tkzDrawSegment(A,G)
\tkzLabelPoints[below](B,D,F)
\tkzLabelPoints[left](A)
\tkzLabelPoints[right](G)
\tkzLabelPoints[below right](C,E)
\begin{scope}[on background layer]
\fill[gray!50] (A) arc(180:00:2cm) -- (C) arc(00:180:1cm) --cycle;
\fill[blue] (A) arc(180:360:3cm) --(E) arc(00:-180:2cm) --cycle;
\end{scope}
\end{tikzpicture}
\end{document}
答案2
我成功了。结果如下:
\documentclass[10pt]{scrartcl}
\usepackage{tikz}
\usepackage{tkz-euclide}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\tkzDefPoints{0/0/A, 1/0/B, 2/0/C, 3/0/D, 4/0/E, 5/0/F, 6/0/G}
\tkzDrawCircle[R](B,1cm)
\tkzDrawCircle[R](C,2cm)
\tkzDrawCircle[R](D,3cm)
\tkzDrawSegment(A,G)
\tkzLabelPoints[below](B,D,F)
\tkzLabelPoints[left](A)
\tkzLabelPoints[right](G)
\tkzLabelPoints[below right](C,E)
\filldraw[color=gray, opacity=0.5]
(E) arc (0:180:2cm) --
(A) arc (180:-180:1cm) --
(A) arc (-180:0:2cm) -- cycle;
\tkzDrawPoints(A,B,C,D,E,F,G)
\end{tikzpicture}
\end{document}
答案3
可以用 填充此区域even odd rule
。我已经在 中解释了此规则这个答案。这里的路径是由3个圆圈连续组成:
\draw[fill=green, even odd rule] (D) circle(3cm)(B) circle (1cm) (C) circle (2cm);
这里要着色的区域是甚至的区域even odd rule
没有被着色。为了用 着色even odd rule
,这个区域必须是奇怪的为此,只需将最大的圆圈(中心 D)再次添加到由其他三个圆圈组成的路径中。
\draw[fill=green, even odd rule] (D) circle(3cm)(B) circle (1cm) (C) circle (2cm) (D) circle(3cm);
完整代码:
\documentclass[10pt]{scrartcl}
\usepackage{tikz}
\usepackage{tkz-euclide}
\usetikzlibrary{calc,backgrounds}
\begin{document}
\begin{tikzpicture}
\tkzDefPoints{0/0/A, 1/0/B, 2/0/C, 3/0/D, 4/0/E, 5/0/F, 6/0/G}
\draw[fill=green, even odd rule] (D) circle(3cm)(B) circle (1cm) (C) circle (2cm) (D) circle(3cm);
\tkzDrawPoints(A,B,C,D,E,F,G)
\tkzDrawSegment(A,G)
\tkzLabelPoints[below](B,D,F)
\tkzLabelPoints[left](A)
\tkzLabelPoints[right](G)
\tkzLabelPoints[below right](C,E)
\end{tikzpicture}
\end{document}
绘制两次中心圆D的结果:
默认输出(3个圆圈):
答案4
\documentclass[10pt]{scrartcl}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\tkzDefPoints{0/0/A, 1/0/B, 2/0/C, 3/0/D, 4/0/E, 5/0/F, 6/0/G}
\tkzFillCircle[blue!20](C,E)
\tkzFillCircle[white](B,C)
\tkzDrawCircle[R](B,1)
\tkzDrawCircle[R](C,2)
\tkzDrawCircle[R](D,3)
\tkzDrawPoints(A,B,C,D,E,F,G)
\tkzDrawSegment(A,G)
\tkzLabelPoints[below](B,D,F)
\tkzLabelPoints[left](A)
\tkzLabelPoints[right](G)
\tkzLabelPoints[below right](C,E)
\end{tikzpicture}
\end{document}