我想指定一个索引列表,让结果是一堆以实心圆为端点的半圆弧。也就是说,给定列表 [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}