Tikz 中任意大小的有限完全图

Tikz 中任意大小的有限完全图

我想展示一个任意有限大小的完整图。这意味着有一定数量的节点与所有其他节点互连。此外,我想澄清的是,节点的数量并不重要。对于数字来说,这看起来就像这样:

$$1, \dots, n$$

我想在连接到完整图中所有其他节点的一侧添加一个附加节点。

我并不是在寻找一本手册,教你如何在 tikz 中做出最优雅的精确表示。那些存在。我正在寻找一种更抽象的描绘,让观看者第一眼就能看出这是一张完整的图。我愿意接受非正统的解决方案。就像一团相互连接的节点云,有或没有\dots……有什么想法吗?

答案1

嗯... 看起来可能不那么常规。这是对这个问题的简单看法。可以随意添加更多/更少的节点。

\documentclass{standalone}

\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
  \foreach \x in {1,...,7}{%
    \pgfmathparse{(\x-1)*360/8}
    \node[draw,circle,inner sep=0.25cm] (N-\x) at (\pgfmathresult:5.4cm) [thick] {};
  }
  \pgfmathparse{7*360/8}
  \node[circle,red] (N-8) at (\pgfmathresult:5.4cm) {\ldots};
  \foreach \x in {1,...,7}{%
    \foreach \y in {\x,...,7}{%
        \path (N-\x) edge[ultra thin,-] (N-\y);
  }
  }
    \foreach \y in {1,...,8}{%
        \path (N-8) edge[red, very thick, loosely dotted] (N-\y);
  }
\end{tikzpicture}
\end{document}

输出:

另一种变体是,用虚线绘制一个节点(带或不带\ldots内部),需要对上述代码进行一些调整:

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}

\begin{document}
\begin{tikzpicture}[ultra thick,decoration={border,segment length=2mm,amplitude=0.3mm,angle=90}]
  \foreach \x in {1,...,7}{%
    \pgfmathparse{(\x-1)*360/8}
    \node[draw,circle,inner sep=0.25cm] (N-\x) at (\pgfmathresult:5.4cm) [thick] {};
  }
  \pgfmathparse{7*360/8}
  \node[draw,circle,red,inner sep=0.25cm,decorate] (N-8) at (\pgfmathresult:5.4cm) {};
  \foreach \x in {1,...,7}{%
    \foreach \y in {\x,...,7}{%
        \path (N-\x) edge[ultra thin,-] (N-\y);
  }
  }
    \foreach \y in {1,...,8}{%
        \path (N-8) edge[red, very thick, loosely dotted] (N-\y);
  }
\end{tikzpicture}
\end{document}

当然,您可以\ldots在红点节点中使用,但您必须将其设置inner sep为另一个值(我建议0.125cm)。

编辑

@JLDiaz 建议标记节点,最后两个节点应标记为$n-1$$n$。这听起来很酷,所以我决定这样做。诀窍是将第一个foreach循环中的节点绘制线替换为:

\node[draw,circle] (N-\x) at (\pgfmathresult:5.4cm) [thick] {\pgfmathparse{(\x==2)?"$n$":((\x==1)?"$n-1$":int(\x-2))}\pgfmathresult};

其中有一个条件,用于检查节点的编号。由于要绘制的最后一个节点是带有的节点\ldots,因此第一个节点应包含$n-1$,第二个节点应包含$n$,因此代码就是这样做的。int需要强制 TikZ 打印整数,否则标签会显示类似“1.0”等的内容。然后还有minimum size=3.5em所有节点的,这确保仅包含数字的节点与必须容纳的节点一样大$n-1$-em如果字体大小发生变化,则选择缩放。

完整代码:

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}

\begin{document}
\begin{tikzpicture}[ultra thick,every node/.style={minimum size=3.5em},decoration={border,segment length=2mm,amplitude=0.3mm,angle=90}]
  \foreach \x in {1,...,7}{%
    \pgfmathparse{(\x-1)*360/8}
    \node[draw,circle] (N-\x) at (\pgfmathresult:5.4cm) [thick] {\pgfmathparse{(\x==2)?"$n$":((\x==1)?"$n-1$":int(\x-2))}\pgfmathresult};
  }
  \pgfmathparse{7*360/8}
  \node[draw,circle,red,inner sep=0.25cm,decorate] (N-8) at (\pgfmathresult:5.4cm) {};
  \foreach \x in {1,...,7}{%
    \foreach \y in {\x,...,7}{%
        \path (N-\x) edge[ultra thin,-] (N-\y);
  }
  }
    \foreach \y in {1,...,8}{%
        \path (N-8) edge[red, very thick, loosely dotted] (N-\y);
  }
\end{tikzpicture}
\end{document}

...然后ta-dah:

在此处输入图片描述

(注意:如果我想到更聪明的办法,我会编辑我的答案......)

相关内容