使用 TikZ 绘制弧链的最佳方法是什么?

使用 TikZ 绘制弧链的最佳方法是什么?

我想指定一个索引列表,让结果是一堆以实心圆为端点的半圆弧。也就是说,给定列表 [0,3,1,2]、[0,1,2,4,3] 和 [0,1,3,6,8,5,2,4,7,9,10],我想生成如下图片(分别为左上、右上和下):

三个例子

在 TikZ 中执行此操作的最佳方法是什么?

答案1

如果序列始终以零开始,则可以使其绘制一个带有循环的连续弧跳。弧的大小取决于数组上当前索引和下一个索引之间的差异。

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[dot/.style={fill,inner sep=1pt,circle}]
\draw (0,0) node[dot]{}
\foreach\x[remember=\x as\xi(initially 0),evaluate={\xa = \x-\xi > 0?180:0;}]
   in {1,3,6,8,5,2,4,7,9,10}{arc (\xa:180-\xa:{abs(\x-\xi)}) node[dot]{}};
\end{tikzpicture}
\end{document}

在此处输入图片描述

如果你将数组更改为{3,1,2}

在此处输入图片描述

进而{1,2,4,3}

在此处输入图片描述

答案2

\documentclass{scrartcl}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}[x=1em]
  \foreach \n in {1,...,4}
    \coordinate (chain-\n) at (\n-1,0)
                (chain-\n) node[circle,draw,fill,inner sep=0pt] {};
  \foreach \from/\to in {1/4,2/3,2/4}
    \draw (chain-\from) to[out=90,in=90,looseness=1.7] (chain-\to);
\end{tikzpicture}

\begin{tikzpicture}[x=1em]
  \foreach \n in {1,...,11}
    \coordinate (chain-\n) at (\n-1,0)
                (chain-\n) node[circle,draw,fill,inner sep=0pt] {};
  \foreach \from/\to in {1/2,2/4,3/5,3/6,4/7,5/8,6/9,7/9,8/10,10/11}
    \draw (chain-\from) to[out=90,in=90,looseness=1.7] (chain-\to);
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容