使用TikZ填充曲线和圆之间的区域

使用TikZ填充曲线和圆之间的区域

这个问题很容易解释。我有下面的图片,现在我想填充圆(弧)和曲线之间的两个区域。

\documentclass{article}

\usepackage{tikz}

\begin{document}
\begin{tikzpicture}[thick,every node/.style={circle,scale=.5,fill}]

\draw (0,0) ++(160:3) arc (160:-160:3);

\node (e1) at (160:3) {};
\node (e2) at (-160:3) {};

\draw(e1) -- node[fill=none,left,scale=2] {$e$} (e2);

\draw plot [smooth] coordinates {(160:3) (130:2) (110:2.5) (100:2.5) (90:3)};
\draw plot [smooth] coordinates {(40:3) (30:1) (-40:1.5) (-80:3)};

\end{tikzpicture}
\end{document}

答案1

您可以通过绘制由曲线和相应圆弧组合而成的封闭路径来填充该区域。

\documentclass[11pt]{article}
\usepackage[T1]{fontenc}
\usepackage{tikz}

\begin{document}
  \begin{tikzpicture}[
    thick,
    every node/.style={
      circle,
      scale=.5,
      fill
    }
  ]
    \draw (0,0) ++(160:3) arc (160:-160:3);

    \node (e1) at (160:3) {};
    \node (e2) at (-160:3) {};

    \draw(e1) -- node[fill=none,left,scale=2] {$e$} (e2);

    \fill[cyan,draw=black] plot[smooth] coordinates {
      (160:3)
      (130:2)
      (110:2.5)
      (100:2.5)
      (90:3)
    } arc[radius=3,start angle=90,end angle=160];
    \fill[cyan,draw=black] plot[smooth] coordinates {
      (40:3)
      (30:1)
      (-40:1.5)
      (-80:3)
    } arc[radius=3,start angle=-80,end angle=40];
  \end{tikzpicture}
\end{document}

填充颜​​色的选择当然由您决定。此处选择的颜色仅用于演示目的。


在此处输入图片描述

答案2

pgfplots 1.10 版刚刚发布,它为填充图表之间区域的问题提供了新的解决方案。

请注意,旧解决方案仍然可行且有效;此处仅提供可能简化任务的更新。为了使本网站的知识库保持最新,我fillbetween在此提供基于新库的解决方案:

在此处输入图片描述

\documentclass{standalone}

\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\usepgfplotslibrary{fillbetween}

\begin{document}
\begin{tikzpicture}[thick,every node/.style={circle,scale=.5,fill}]

\draw[red,name path=arc]  (160:3) arc (160:-160:3);

\node (e1) at (160:3) {};
\node (e2) at (-160:3) {};

\draw(e1) -- node[fill=none,left,scale=2] {$e$} (e2);

\draw[name path=A] plot [smooth] coordinates {(140:3.01) (130:2) (110:2.5) (100:2.5) (90:3.01)};
\draw[name path=B] plot [smooth] coordinates {(40:3.001) (30:1) (-40:1.5) (-80:3.001)};

\tikzfillbetween[of=A and arc,on layer=,split,every even segment/.style={fill=none,draw=none}]{blue,opacity=50}


\tikzfillbetween[of=B and arc,on layer=,split,
    every even segment/.style={fill=none,draw=none},
]{red,opacity=50}
\end{tikzpicture}
\end{document}

此解决方案依赖于pgfplots(!) 解决方案,即使情节本身与 完全无关pgfplots。它利用\tikzfillbetween附带的\usepgfplotslibrary{fillbetween}

关键思想是完整绘制输入路径并为它们分配名称。在我们的例子中,我们有\draw现在标记为的语句name path=arc,和两个分别名为A和的图B。然后我们有两个\tikzfillbetween语句。这些语句生成一个或多个\draw语句,具体取决于方括号中的选项。方括号中的选项确定输入哪些路径以及一些细节,例如样式和图层。花括号中的选项决定通用样式。在我们的例子中,我们fill=none,draw=none对每个偶数段使用以仅显示奇数段 - 尝试不使用此选项。on layer具有空值的选项表示使用当前层。通常,fillbetween依赖于分层图形,使得输入路径绘制在填充路径之上。在我们的例子中,我们忽略了它,但您可以\pgfsetlayers{pre main,main}在之后写入\begin{tikzpicture}[..]以启用分层图形。

相关内容