如何使用 tex 绘制由三条圆弧组成的椭圆?

如何使用 tex 绘制由三条圆弧组成的椭圆?

图片如下,希望可以填颜色,也可以填数字,圆弧的曲率跟椭圆的曲率一致。在此处输入图片描述

答案1

使用path pictures 可以让 TikZ 的操作变得相对简单。路径图片基本上是一种可以放在路径内的绘图,而不是(或除了)填充。它将自动根据路径进行裁剪。


为了减少冗余,我定义了样式ell = <fill> : <shifting> : <node content>

<shifting>由内部的因子 ⅟₃ 控制,shift=(left:#2/3)也由此处指定的值控制。我只使用 0、1、2 和 3,但当椭圆之间的距离应该更小或更大时,您可以调整它们。


对于带有文本的节点,我们可以告诉 TikZ 所有节点都nodes应该(0:5/6)位于椭圆右侧中间的位置(因为 5/6 是 1 − ⅟₃/2,其中 ⅟₃ 与上面的因子相同)。这仅在您仅使用01、... 作为<shifting>值时才有效。我选择anchor=mid这样看起来更适合小写文本。如果我们使用ell*节点,则将其放置在剩余空间的中间。


我们还可以使用text along path装饰它将每个字母单独地沿着椭圆放置。

代码

\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{
  calc,
  decorations.text} % only needed for second picture
\begin{document}
\tikz[
  x=3cm, y=2cm, radius=1, nodes={rotate=90, anchor=mid, at=(0:5/6)},
  ell*/.style={
    nodes={centered, at=($(path picture bounding box.west)!.5!(0:1)$)}, ell={#1}},
  ell/.style args={#1:#2:#3}{fill=#1, draw=black, shift=(left:#2/3),
                             insert path={circle[] node {#3}}}]
\path  [ell =gray!75!blue!30 : 0 : four, path picture={
  \path[ell =gray            : 1 : three];
  \path[ell =gray!50         : 2 : two];
  \path[ell*=gray!10         : 3 : one];
}];
\tikz[
  x=3cm, y=2cm, radius=1,
  text deco/.style={postaction=decorate, decoration={
      name=text along path, raise=.5ex, text align=center, text={#1}}},
  ell/.style args={#1:#2:#3}{
    fill=#1, draw=black, shift=(left:#2/3), text deco={#3},
    insert path={(down:1) arc[start angle=-180, delta angle=360]}}]
\path  [ell=gray!75!blue!30 : 0 : four, path picture={
  \path[ell=gray            : 1 : three];
  \path[ell=gray!50         : 2 : two];
  \path[ell=gray!10         : 3 : one];
}];
\end{document}

输出

在此处输入图片描述

在此处输入图片描述

答案2

作为起点,您可以使用 TikZ 绘制几个椭圆并剪切它们:

\documentclass{standalone}

\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
\fill[gray,draw=black] (0,0) ellipse [x radius=2cm, y radius=1cm];
\begin{scope}
  \clip (0,0) ellipse [x radius=2cm, y radius=1cm];
  \fill[lightgray,draw=black] (-2,0) ellipse [x radius=2cm, y radius=1cm];
\end{scope}
\node at (-1,0) {1};
\node at (1,0) {1};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容