遮蔽区域

遮蔽区域

对下图所示区域进行阴影处理的最佳方法是什么?

\documentclass{article}

\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\draw (0, 0) rectangle (10, 10);
\draw (0, 10) arc (90 : 0 : 10);
\draw (0, 10) arc (180 : 360 : 5);
\draw (0, 10) arc (90 : -90 : 5);
\end{tikzpicture}

\end{document}

期望输出

答案1

只是为了完整性:没有用白色覆盖物体,所以如果背景中有某些东西和/或有非平凡的不透明度,这也有效。

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (0, 0) rectangle (10, 10);
\begin{scope}
\draw[clip] (0, 10) arc (180 : 360 : 5);
\fill[red] (0, 10) arc (90 : 0 : 10) -- (0,0) arc(-90:90:5);
\end{scope}
\draw (0, 10) arc (90 : 0 : 10);
\draw (0, 10) arc (90 : -90 : 5);
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

您可以使用fillbetween来自的库pgfplots,但希望有更好的解决方案,因为这太慢了。

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{backgrounds}

\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{fillbetween}

\begin{document}

\begin{tikzpicture}
    \draw (0, 0) rectangle (10, 10);
    \draw[name path=A] (0, 10) arc (90 : 0 : 10);
    \draw[name path=B] (0, 10) arc (180 : 360 : 5);
    \draw[name path=C] (0, 10) arc (90 : -90 : 5);

    \path[intersection segments={of=A and B,sequence={A1 -- B1[reverse]}},name path=D];
    \scoped[on background layer]
        \fill[red, intersection segments={of=C and D,sequence={A1 -- B1[reverse]}}];
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容