使用 TikZ 绘制类似于 Grötzsch 图的六边形结构

使用 TikZ 绘制类似于 Grötzsch 图的六边形结构

我正在尝试绘制一个六边形,该六边形连接到六边形本身边界内的一组顶点和边。它类似于 Grötzsch 图,但它是六边形而不是五边形。

到目前为止,我有从其他人那里找到的创建 Grötzsch 图的代码。我尝试用 6 个顶点创建它。

这是我尝试使用 tikz 创建的照片:

在此处输入图片描述

这是我现在拥有的代码,但我被困在六边形的中间。我从这里的另一个帖子答案中获得了此代码,我几乎没有做任何修改,但却为我指明了正确的方向(https://tex.stackexchange.com/a/674043/283535

\begin{tikzpicture}
\node[thick,regular polygon,regular polygon sides=6, minimum size=7cm,draw] (poli) at (0,0) {};

\coordinate (v1) at (poli.corner 2);
\coordinate (v2) at (poli.corner 3);
\coordinate (v3) at (poli.corner 4);
\coordinate (v4) at (poli.corner 5);
\coordinate (v5) at (poli.corner 1);
\coordinate (v6) at (poli.corner 6);


\filldraw (v1) node[left]{$v_1$} circle (2pt);
\filldraw (v2) node[left]{$v_2$} circle (2pt);
\filldraw (v3) node[right]{$v_3$} circle (2pt);
\filldraw (v4) node[right]{$v_4$} circle (2pt);
\filldraw (v5) node[above]{$v_5$} circle (2pt);
\filldraw (v6) node[right]{$v_6$} circle (2pt);

\draw (v1) -- (v3)
 (v1) -- (v4)
 (v2) -- (v4)
 (v2) -- (v5)
 (v3) -- (v5);

\coordinate (u1) at ($0.5*(v2)+0.5*(v5)$);
\coordinate (u2) at ($0.5*(v1)+0.5*(v3)$);
\coordinate (u3) at ($0.5*(v2)+0.5*(v4)$);
\coordinate (u4) at ($0.5*(v3)+0.5*(v5)$);
\coordinate (u5) at ($0.5*(v1)+0.5*(v4)$);
\coordinate (w) at (poli.center);

\filldraw (u1) node[left]{$u_1$} circle (2pt);
\filldraw (u2) node[left]{$u_2$} circle (2pt);
\filldraw (u3) node[right]{$u_3$} circle (2pt);
\filldraw (u4) node[right]{$u_4$} circle (2pt);
\filldraw (u5) node[above]{$u_5$} circle (2pt);
\filldraw (w) node[right]{$w$} circle (2pt);

\draw (u1) -- (w)
 (u2) -- (w)
 (u3) -- (w)
 (u4) -- (w)
 (u5) -- (w);

\end{tikzpicture}

我更改了多边形和顶点。我现在正尝试将它们连接到新的顶点集 (u_1, ..., u_6),但它们目前对我来说显示得很奇怪。

感谢您的所有帮助!

答案1

我通常会建议将graphs库的clockwise放置与结合起来,但将标签添加到节点会变得很繁琐。subgraph X_n

通过使用极坐标并计算角度,将节点放置在多边形的角上总是非常容易的:

\foreach \rad/\ltr in {1.2/u, 2.4/v}
  \foreach[count=\j from 0, evaluate={\ang=90+\j/6*360;}] \i in {1, ..., 6}
    \node[n, label={[anchor=\ang+180, inner sep=+.15em]\ang:\mathstrut\ltr_\i}]
      (\ltr_\i) at (\ang:\rad) {};

重复使用文件\ang允许我们将标签放在相同的方向。

对于连接节点,graphs仍然可以使用该库,因为语法更短:

\graph[use existing nodes]{
  w -- {\foreach \i in {1, ..., 6}{u_\i}},
  {[cycle] \foreach \i in {1, ..., 6}{v_\i}},
  {[cycle] u_1, v_2, u_3, v_4, u_5, v_6},
  {[cycle] u_2, v_3, u_4, v_5, u_6, v_1},
};

cycle操作员将连接所有给定的节点。

我们可以(a) edge (b) (b) edge (c) (c) edge … edge (n) (n) edge (a)只写一个循环[cycle] a, b, c, … n,甚至使用一个\foreach循环来实现这一点。

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{graphs, quotes}
\begin{document}
\begin{tikzpicture}[
  math nodes/.style={execute at begin node=$, execute at end node=$},
  every label/.append style=math nodes,
  n/.style={shape=circle, fill, inner sep=+0pt, minimum size=+4pt, outer sep=+0pt},
]
\node[n, "w" right] (w) {};
\foreach \rad/\ltr in {1.2/u, 2.4/v}
  \foreach[count=\j from 0, evaluate={\ang=90+\j/6*360;}] \i in {1, ..., 6}
    \node[n, label={[anchor=\ang+180, inner sep=+.15em]\ang:\mathstrut\ltr_\i}]
      (\ltr_\i) at (\ang:\rad) {};

\graph[use existing nodes]{
  w -- {\foreach \i in {1, ..., 6}{u_\i}},
  {[cycle] \foreach \i in {1, ..., 6}{v_\i}},
  {[cycle] u_1, v_2, u_3, v_4, u_5, v_6},
  {[cycle] u_2, v_3, u_4, v_5, u_6, v_1},
};
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

相关内容