答案1
tikz
这是一种简单的方法,通过一些循环并手动连接节点来完成。
\documentclass[tikz, border=20]{standalone}
\begin{document}
\begin{tikzpicture}
% 2 nodes
\draw (0, 0) circle [radius=2];
\foreach \i in {0, 1} {
\coordinate (node\i) at (360/2*\i+90:2);
\draw (node\i) circle [radius=0.1];
}
\draw (node0) -- (node1);
\begin{scope}[xshift=5cm]
% 3 nodes
\draw (0, 0) circle [radius=2];
\foreach \i in {0, 1, 2} {
\coordinate (node\i) at (360/3*\i+90:2);
\draw (node\i) circle [radius=0.1];
}
\draw (node0) -- (node1);
\draw (node1) -- (node2);
\draw (node2) -- (node0);
\end{scope}
\begin{scope}[xshift=10cm]
% 4 nodes
\draw (0, 0) circle [radius=2];
\foreach \i in {0, 1, 2, 3} {
\coordinate (node\i) at (360/4*\i+90:2);
\draw (node\i) circle [radius=0.1];
}
\draw (node0) -- (node1);
\draw (node1) -- (node2);
\draw (node2) -- (node3);
\draw (node3) -- (node0);
\draw (node0) -- (node2);
\draw (node1) -- (node3);
\end{scope}
\begin{scope}[yshift=-5cm]
% 5 nodes
\draw (0, 0) circle [radius=2];
\foreach \i in {0, 1, 2, 3, 4} {
\coordinate (node\i) at (360/5*\i+90:2);
\draw (node\i) circle [radius=0.1];
}
\draw (node0) -- (node1);
\draw (node1) -- (node2);
\draw (node2) -- (node3);
\draw (node3) -- (node4);
\draw (node4) -- (node0);
\draw (node0) -- (node2);
\draw (node0) -- (node3);
\draw (node1) -- (node3);
\draw (node1) -- (node4);
\draw (node2) -- (node4);
\end{scope}
\begin{scope}[xshift=5cm, yshift=-5cm]
% 6 nodes
\draw (0, 0) circle [radius=2];
\foreach \i in {0, 1, 2, 3, 4, 5} {
\coordinate (node\i) at (360/6*\i+90:2);
\draw (node\i) circle [radius=0.1];
% \node at (node\i) {\Huge\color{red}\i};
}
\draw (node0) -- (node1);
\draw (node1) -- (node2);
\draw (node2) -- (node3);
\draw (node3) -- (node4);
\draw (node4) -- (node5);
\draw (node5) -- (node0);
\draw (node0) -- (node2);
\draw (node0) -- (node3);
\draw (node0) -- (node4);
\draw (node1) -- (node3);
\draw (node1) -- (node4);
\draw (node1) -- (node5);
\draw (node2) -- (node4);
\draw (node2) -- (node5);
\draw (node3) -- (node5);
\end{scope}
\begin{scope}[xshift=10cm, yshift=-5cm]
% 6 nodes (again)
\draw (0, 0) circle [radius=2];
\foreach \i in {0, 1, 2, 3, 4, 5} {
\coordinate (node\i) at (360/6*\i+90+rand*20:2);
}
\draw (node0) -- (node1);
\draw (node1) -- (node2);
\draw (node2) -- (node3);
\draw (node3) -- (node4);
\draw (node4) -- (node5);
\draw (node5) -- (node0);
\draw (node0) -- (node2);
\draw (node0) -- (node3);
\draw (node0) -- (node4);
\draw (node1) -- (node3);
\draw (node1) -- (node4);
\draw (node1) -- (node5);
\draw (node2) -- (node4);
\draw (node2) -- (node5);
\draw (node3) -- (node5);
\end{scope}
\end{tikzpicture}
\end{document}
解释
这里使用的关键元素是
\foreach \i in {0, 1, 2} {
<do something with \i>
}
这是 中的简单循环tikz
。代码<do something with \i>
执行三次,依次\i
取值0
、1
和2
。本例中使用的代码是
\coordinate (node\i) at (360/2*\i+90:2);
\draw (node\i) circle [radius=0.1];
它将坐标标记放置在某个位置并为其命名node\i
(用当前值\i
替换)。位置以极坐标表示(使用度数),极坐标的一般语法tikz
是,(a:r)
其中r
是半径,a
是角度(在水平轴上方测量,因此常数偏移量是+ 90
从圆的顶部测量的)。这里的第二行在坐标位置绘制一个小圆圈。
循环结束后,只需连接所有想要连接的节点。
最终的不规则绘图是通过在每个角度上添加随机偏移来完成的,然后可以使用rand
该偏移按 20 倍缩放来获得明显的效果。
每幅画(第一幅除外)都放置在一个scope
环境中,并且此范围的每个元素都应用了xshift
and/or yshift
。这会将原点移动指定的量(您必须在此处输入单位,否则默认为 pt)
提示
tikz
循环可以解析类似
\foreach \i in {0, ..., 5} {}
它将执行 6 次,分别\i
取值 0、1、2、3、4 和 5。或者你可以使用
\foreach \i in {0, 0.5, ..., 2} {}
它将执行 5 次,分别\i
取值 0、0.5、1、1.5 和 2。
不要害怕画出最终图片中不会出现的东西,例如连接我所拥有的节点时
\node at (node\i) {\Huge \i};
在循环内对每个节点进行编号,这样我就可以轻松看到我需要连接什么。
最后,最好的学习方法tikz
就是继续使用它,并在需要时查找内容。玩得开心
答案2
我认为您可以通过在网站上搜索找到多个答案,但这里有一种绘制您需要的完整图形的方法(设计为正多边形)。
\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
\begin{tikzpicture}
\def\R{3} \def\N{5}
\draw (0,0) circle(\R);
\foreach \i in {1,...,\N}
{
\coordinate (P-\i) at (\i*360/\N:\R);
\draw (P-\i) circle(5pt);
}
\pgfmathtruncatemacro\n{\N-1}
\foreach \i in {1,...,\n}
{
\pgfmathtruncatemacro\j{\i+1}
\foreach \k in {\j,...,\N} \draw (P-\i) -- (P-\k);
}
\end{tikzpicture}
\end{document}