我正在尝试绘制一个六边形,该六边形连接到六边形本身边界内的一组顶点和边。它类似于 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}