填充 TikZ 中两条路径所包围的区域

填充 TikZ 中两条路径所包围的区域

如何在 TikZ 中填充由两条路径包围的区域(灰色!50)?我尝试过很多解决方案,但都不起作用。

\begin{tikzpicture}[scale=1.7]
\draw[semithick] (0,0) -- (2,0) -- (2,2) -- (0,2) -- cycle;
\draw[name path=f, semithick] (1,1) circle (1);
\draw[name path=g, semithick] (0,0) arc (270:360:2);
\end{tikzpicture}

也就是说,我想要这样的东西: 在此处输入图片描述

答案1

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{intersections}% <- not needed for the below code
\begin{document}
\begin{tikzpicture}[scale=1.7]
\begin{scope}
 \clip  (1,1) circle [radius=1];
\fill[gray]  (0,0) arc[start angle=270,end angle=360,radius=2] |- cycle;
\end{scope}
\draw[semithick] (0,0) rectangle (2,2);
\draw[name path=f, semithick] (1,1) circle [radius=1];
\draw[name path=g, semithick] (0,0) arc[start angle=270,end angle=360,radius=2];
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

\clip使得接下来的所有内容都只在剪辑路径内绘制。

\documentclass[tikz, border=1cm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw (0,0) rectangle (2,2);
\draw (0,0) arc (270:360:2);
\draw[clip] (1,1) circle (1);
\fill[gray!50] (0,0) arc (270:360:2) -- (2,0) -- cycle;
\end{tikzpicture}
\end{document}

实心月亮形状

答案3

另一种方法是先填充区域,然后绘制线条,而不用剪辑命令。

\documentclass[tikz, border=1cm]{standalone}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}[scale=1.7]
\fill[gray!50] (1,1) circle (1);    % gray circle
\fill[white] (0,0) arc (270:360:2) -| cycle;    % white sector over
\draw[semithick] (0,0) -- (2,0) -- (2,2) -- (0,2) -- cycle;
\draw[name path=f, semithick] (1,1) circle (1);
\draw[name path=g, semithick] (0,0) arc (270:360:2);
\end{tikzpicture}
\end{document}

由此得出以下结论

在此处输入图片描述

相关内容