我正在寻找一种绘制如下图形的方法:
https://d2r55xnwy6nx47.cloudfront.net/uploads/2020/02/Ringels_Figs07.gif
你能告诉我是否可以使用 LaTex 制作类似的东西吗?
答案1
这只是无数种方法中的一种。
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\foreach \Iterator in {1,...,11}
{\begin{tikzpicture}
\path foreach \X in {1,...,11}
{(-2.25*360/11-\X*360/11:4) node[circle,inner sep=1ex,draw,thick,fill=gray] (c\X){}};
\foreach \X in {11,...,\Iterator}
{\foreach \Y [evaluate=\Y as \Z using {int(Mod(\X+\Y-1,11)+1)}]in {2,4,...,10}
{\ifnum\X=\Iterator
\draw[blue!50,ultra thick] (c\X) -- (c\Z);
\else
\draw[gray!50,ultra thick] (c\X) -- (c\Z);
\fi
}}
\end{tikzpicture}}
\end{document}
答案2
基于边缘仅在外部你拥有的不仅仅是一个起点。
对于动态图,你需要类似图像魔法。
查看导出使用动画包创建的动画以获得解释。
\documentclass[tikz,export]{standalone}
\usepackage{animate}
\usepackage{pgfplots}
\usetikzlibrary{shapes.geometric}
\def\numpoly{9}%number of nodes
\def\startangle{30}%direction of the first node
\def\pradious{33mm}
\begin{document}
\begin{tikzpicture}[
every node/.style={draw=blue!60,shape=circle,fill=blue!60,text=white, minimum width={width("ee")+1pt}}]
%------- calculations of the positions angles
\pgfmathparse{int(\startangle+360/\numpoly)}%
\let\nextangle=\pgfmathresult
\pgfmathparse{int(\startangle-360/\numpoly+360)}%
\let\endtangle=\pgfmathresult
%--- nodes
\foreach \i [count=\ii from 1] in {\startangle,\nextangle,...,\endtangle}
\path (\i:\pradious) node (p\ii) {\ii};
%--- interconnections
\foreach \x in {1,...,\numpoly}
\foreach \y in {\x,...,\numpoly}
\draw[thin, gray] (p\y) -- (p\x);
\end{tikzpicture}
\end{document}