循环序列图(tikz?)

循环序列图(tikz?)

对于手机拍的照片质量稍差的情况,提前致歉:

循环序列

我想在我正在做的事情中加入一些这样的数字。我刚刚开始学习 tikz,它似乎可以用来做这样的事情,但我现在还不够熟练。

所包含的图片有 16 个单元格,但我还有另一个有 8 个单元格的图形和一个不太重要的有 27 个单元格的图形,因此,如果可以普遍做到这一点,使这些也变得容易,那就太好了。

答案1

下面的宏CircularSequence采用三个参数:

  • 外半径
  • 内半径
  • 要应用的顺序

它应该能够使用任意数量的元素创建此图像。以下是具有 8 个和 16 个元素的示例:

在此处输入图片描述

参考:

代码:

\documentclass{article}
\usepackage{tikz}
\usepackage{xstring}

% https://tex.stackexchange.com/questions/21559/macro-to-access-a-specific-member-of-a-list/21560#21560
\newcommand*\GetListMember[2]{\StrBetween[#2,\number\numexpr#2+1]{,#1,},,\par}%

\newlength{\MidRadius}
\newcommand*{\CircularSequence}[3]{%
    % #1 = outer circle radius
    % #2 = inner circle radius
    % #3 = seqeunce
    \StrCount{#3}{,}[\NumberOfElements]
    \pgfmathsetmacro{\AngleSep}{360/(\NumberOfElements+1)}
    \pgfmathsetlength{\MidRadius}{(#1+#2)/2}
    \draw [red,  ultra thick] circle (#2);
    \draw [blue, ultra thick] circle (#1);
    \foreach [count = \Count] \Angle in {0,\AngleSep,..., 360} {%
        \draw [gray, ultra thick] (\Angle:#2) -- (\Angle:#1);
        \pgfmathsetmacro{\MidPoint}{\Angle+\AngleSep/2}
        \node at (\MidPoint:\MidRadius) {\GetListMember{#3}{\Count}};
    }%
}%
\begin{document}
\begin{tikzpicture}
    \CircularSequence{3.0cm}{2.cm}{1,2,3,4,5,6,7,8}

    \begin{scope}[xshift=7.0cm]
        \CircularSequence{2.5cm}{1.5cm}{1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8}
    \end{scope}
\end{tikzpicture}
\end{document}

相关内容