答案1
像这样:
- 对于点的位置使用
regular shape
来自库的角落shapes.geometric
- 在环路中绘制点和连接线
- 点的标签用循环中的计数器定义
\documentclass[tikz, border=3mm]{standalone}
\usetikzlibrary{shapes.geometric}
\tikzset{
dot/.style = {circle, inner sep=1pt, fill,
node contents={}},
PG/.style = {% PentaGon
regular polygon, regular polygon sides=5,
minimum size=#1cm,
node contents={}},
every label/.append style = {inner sep=1pt, font=\tiny}
}
\begin{document}
\begin{tikzpicture}
\node (n1) [PG=6, draw];
\node (n2) [PG=4];
\node (n3) [PG=2];
%
\foreach \i/\ii [evaluate=\ii as \jj using int(\ii+5),
evaluate=\ii as \kk using int(\ii+10)]
in {1/1,2/5,3/4,4/3,5/2}
{
\node at (n1.corner \i) [dot, label=90+\i*360/5:\ii];
\node at (n2.corner \i) [dot, label=90+\i*360/5:\jj];
\node at (n3.corner \i) [dot, label=90+\i*360/5:\kk];
}
%%
\foreach \j [count=\i from 0] in {1,...,5}
{
\pgfmathsetmacro{\k}{int(1+Mod(\i+1,5))}
\pgfmathsetmacro{\l}{int(1+Mod(\i+3,5))}
\pgfmathsetmacro{\m}{int(1+Mod(\i+2,5))}
\draw (n1.corner \j) -- (n3.corner \j)
(n1.corner \j) -- (n2.corner \k)
(n2.corner \j) -- (n3.corner \l)
(n3.corner \j) -- (n3.corner \l);
}
\end{tikzpicture}
\end{document}
编辑:在第一个版本的答案中,节点的标记方向与 OP 图片中显示的相反。现在,通过替换原始循环可以纠正此问题
\foreach \i [count=\j from 6,
count=\k from 11] in {1,...,5}
{
\node at (n1.corner \i) [dot, label=90+\i*360/5:\i];
\node at (n2.corner \i) [dot, label=90+\i*360/5:\j];
\node at (n3.corner \i) [dot, label=90+\i*360/5:\k];
}
使用现在位于 MWE 上方的代码。
答案2
这是一种简单的入门方法,它定义了一个稍后可以使用的节点样式mynodes
。然后您可以在不同位置绘制节点,例如在极坐标系中,其中第一个值是角度,第二个值是距离。最后您可以\draw
从任何节点到任何节点。
这是我为您开始的,但由于我没有在边缘找到系统,您可能要自己完成它:
\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\tikzset{mynodes/.style={inner sep=2pt,fill=black,circle}}
\begin{tikzpicture}[scale=2]
\node[mynodes](N1) at (90:3){};
\node[mynodes](N2) at (18:3){};
\node[mynodes](N3) at (-54:3){};
\node[mynodes](N4) at (-126:3){};
\node[mynodes](N5) at (-198:3){};
\node[mynodes](N6) at (90:2){};
\node[mynodes](N7) at (18:2){};
\node[mynodes](N8) at (-54:2){};
\node[mynodes](N9) at (-126:2){};
\node[mynodes](N10) at (-198:2){};
\node[mynodes](N11) at (90:1){};
\node[mynodes](N12) at (18:1){};
\node[mynodes](N13) at (-54:1){};
\node[mynodes](N14) at (-126:1){};
\node[mynodes](N15) at (-198:1){};
\draw (N1) -- (N2) -- (N3) -- (N4) -- (N5) -- (N1);
\draw (N1) -- (N10);
\draw (N2) -- (N6);
\draw (N3) -- (N7);
\draw (N4) -- (N8);
\draw (N5) -- (N9);
\draw (N4) -- (N9) -- (N14) -- (N12) -- (N7) -- (N2);
\draw (N3) -- (N8) -- (N13) -- (N15) -- (N10) -- (N5);
\draw (N1) -- (N6) -- (N11) -- (N9);
\end{tikzpicture}
\end{document}
通过使用定义循环节点可能会引入复杂性\pgfforeach
,但我避免了这样做,正如您所说,您是初学者。但是对于较少的代码,这会很有用。
答案3
为了比较目的。
使用以下方式编译阿希希·董玉.(请不要修复它)
或者 http://asymptote.ualberta.ca/
size(7cm);
pair[] P,Q,T;
for (int i=0; i<5;++i){
P.push(dir(90-i*72));
Q.push(2/3*dir(90-i*72));
T.push(1/3*dir(90-i*72));
}
P.cyclic=true;
T.cyclic=true;
for (int i=0; i<P.length;++i){
label(scale(0.6)*Label("$"+(string) (i+1) +"$"),P[i],dir(degrees(P[i])));
label(scale(0.6)*Label("$"+(string) (i+6) +"$"),Q[i],dir(degrees(Q[i])+90));
label(scale(0.6)*Label("$"+(string) (i+11) +"$"),T[i],dir(degrees(T[i])+90));
draw(P[i]--T[i]);
draw(P[i+1]--Q[i]);
draw(Q[i]--T[i+2]);
}
draw(T[0]--T[2]--T[4]--T[1]--T[3]--cycle);
path pentagon=operator --(... P)--cycle;
draw(pentagon);
dot(P);
dot(Q);
dot(T);