4. 圆与圆弧之间填充

4. 圆与圆弧之间填充

我需要填充由 4 个圆弧定义的区域,我知道这些圆弧的中心和半径。

我无法创建该区域的轮廓并填充它。

这是带有圆圈的 MWE,但图片尺寸太大:

\documentclass[tikz,border=5]{standalone}
\usepackage{amsmath}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
    \def\RI{1};
    \def\RE{6};
    \def\RL{5};
    \draw[name path=CI] circle[radius=\RI];
    \draw[name path=CE,blue] (0,0) circle [radius=\RE];
    \draw[name path=CR,green] (0,\RI+\RL) circle[radius=\RL];
    \draw[name path=CL,red] (0,-\RI-\RL) circle[radius=\RL];
    \node[purple] at (-\RI/2-\RE/2,0) {\tiny Color here};
    \path[purple,ultra thick,intersection segments={of=CR and CE,sequence={L2[reverse]--R3}},name path=P1,->,dashed];
    \path[purple,ultra thick,intersection segments={of=P1 and CL,sequence={L1--R2[reverse]}},name path=P2,->,dashed];
    \fill[purple,ultra thick,intersection segments={of=P2 and CI,sequence={L2--R2[reverse]}},name path=P3,->,dashed];
\end{tikzpicture}
\end{document}

生产 用圆圈填充区域构建

但是当我尝试做同样的事情来arc获得更小的输出时,我无法构建这个fill区域。

\begin{tikzpicture}
    \def\RI{1};
    \def\RE{6};
    \def\RL{5};
    \draw[name path=CI] circle[radius=\RI];
    \draw[name path=CE,blue] ++(0,\RE) arc [start angle=90, end angle=270,radius=\RE];
    \draw[name path=CR,green] (-\RL,\RI+\RL) arc [start angle=180, end angle=270,radius=\RL];
    \draw[name path=CL,red] (0,-\RI) arc [start angle=90, end angle=180,radius=\RL];
    \node[purple] at (-\RI/2-\RE/2,0) {\tiny Color here};
    % \path[purple,ultra thick,intersection segments={of=CR and CE,sequence={L2[reverse]--R3}},name path=P1,->,dashed];
    % \path[purple,ultra thick,intersection segments={of=P1 and CL,sequence={L1--R2[reverse]}},name path=P2,->,dashed];
    % \fill[purple,ultra thick,intersection segments={of=P2 and CI,sequence={L2--R2[reverse]}},name path=P3,->,dashed];
\end{tikzpicture}

生产 用电弧产生填充区

编辑1:使用overlay来自的解决方案@Qrrbrbirlbel评论

如果我使用命令overlay上的选项\draw,顶部似乎没问题,但底部不行。我认为问题出在它intersection segment没有overlay选项,但我知道如何设置它。我的目标是仔细查看该fill区域。

\begin{tikzpicture}
    \def\RI{1}
    \def\RE{6}
    \def\RL{5}
    \draw[name path=CI] circle[radius=\RI];
    \draw[name path=CE,blue,overlay] (0,0) circle [radius=\RE];
    \draw[name path=CR,green,overlay] (0,\RI+\RL) circle[radius=\RL];
    \draw[name path=CL,red,overlay] (0,-\RI-\RL) circle[radius=\RL];
    \node[purple] at (-\RI/2-\RE/2,0) {\tiny Color here};
    \path[purple,ultra thick,intersection segments={of=CR and CE,sequence={L2[reverse]--R3}},name path=P1,->,dashed,overlay];
    \path[purple,ultra thick,intersection segments={of=P1 and CL,sequence={L1--R2[reverse]}},name path=P2,->,dashed,overlay];
    \fill[purple,ultra thick,intersection segments={of=P2 and CI,sequence={L2--R2[reverse]}},name path=P3,->,dashed];
\end{tikzpicture}

在此处输入图片描述

答案1

序列需要更改为

  • P1:L2[reverse]--R2
  • P2:L1--R1[reverse]

因为现在您有不同的交叉点和不同的路径分段。蓝色圆圈 (CE) 与绿色圆圈 (CR) 相交两次,但您需要第三个线段 ( R3),但现在您只有一个交叉点,因此它们总共只有两个线段,您需要最后一个线段:R2

P2 和蓝色与红色的交点也是同样的道理。由于绿色和红色与黑色相切,因此 P3 的顺序无需改变。

代码

\documentclass[tikz, border=5pt]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{fillbetween}
\begin{document}
\begin{tikzpicture}
\def\RI{1} \def\RE{6} \def\RL{5} % no ; here
\draw[name path=CI] circle[radius=\RI];
\draw[name path=CE, blue]  (0,\RE)
  arc [start angle= 90, end angle=270, radius=\RE];
\draw[name path=CR, green] (-\RL,\RI+\RL)
  arc [start angle=180, end angle=270, radius=\RL];
\draw[name path=CL, red] (0,-\RI)
  arc [start angle= 90, end angle=180, radius=\RL];
\path[name path=P1,
  intersection segments={of=CR and CE, sequence={L2[reverse]--R2}}];
\path[name path=P2,
  intersection segments={of=P1 and CL, sequence={L1--R1[reverse]}}];
\fill[purple, name path=P3, % naming not really necessary
  intersection segments={of=P2 and CI, sequence={L2--R2[reverse]}}];
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

相关内容