Tkz-graph 和 foreach

Tkz-graph 和 foreach

我想使用 usepackage tkz-graph 和命令 foreach 或任何其他方法绘制以下图形: 在此处输入图片描述

\documentclass{article}
\usepackage{amssymb,amsmath}
\usepackage{xcolor}
\usepackage{tkz-graph}

\begin{document}

\begin{tikzpicture}[rotate=-90]
\GraphInit[vstyle=Classic]
\SetVertexNoLabel
\SetGraphUnit{1.5}
\tikzset{VertexStyle/.append style={fill=black, minimum size=7pt, inner sep=1pt}}
\Vertex{a}
\SOEA(a){b}
\NOEA(a){c}
\EA(b){d}
\EA(c){e}
\Edges(b,d,e,c,a,b,c,e,b)  
\Edges(e,a,d,c)  
\end{tikzpicture}

\end{document}

答案1

香草溶液tikz

\documentclass[border = 5pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\begin{tikzpicture}[
    node style/.style = {fill = black, minimum size = 7pt, circle},
    edge style/.style = {black, thick},
  ]

  % base
  \foreach \i in {0,...,4} {
    \node[node style] (A\i) at ({2 * cos(72 * \i)}, {2 * sin(72 * \i)}) {};
  }

  % blocks
  \foreach \i [evaluate=\j as \j using {int(Mod(\i + 1, 5))}] in {0,...,4} {

    % nodes, each block has nodes (A, B, C, D, E)
    \node[node style] (C\i) at ($ (A\i)!2cm!-90:(A\j) $) {};
    \node[node style] (D\i) at ($ (A\j)!2cm!90:(A\i) $) {};
    \coordinate (T\i) at ($ (C\i)!0.5!(D\i) $);
    \node[node style] (E\i) at ($ (T\i)!1.5cm!-90:(D\i) $) {};

    % edges
    \draw[edge style] (A\i) -- (A\j) -- (C\i) -- (D\i) -- (A\i)
    -- (C\i) -- (E\i) -- (D\i) -- (A\j) (A\i) -- (E\i) -- (A\j);

  }
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

根据您的图表和 提供的解决方案\foreach

\documentclass{article}
\usepackage{amssymb,amsmath}
\usepackage{xcolor}
\usepackage{tkz-graph}

\begin{document}
\tikzset{pics/.cd,
house/.style={code={
\Vertex{a}
\SOEA(a){b}
\NOEA(a){c}
\EA(b){d}
\EA(c){e}
\Edges(b,d,e,c,a,b,c,e,b)  
\Edges(e,a,d,c)}}}
\begin{tikzpicture}
\GraphInit[vstyle=Classic]
\SetVertexNoLabel
\SetGraphUnit{1.5}
\tikzset{VertexStyle/.append style={fill=black, minimum size=7pt, inner sep=1pt}}
\foreach \X in {0,72,...,288}
{\path (\X-18:2.1) pic[rotate around={\X+180-18:(3,0)}] {house};}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

由于问题被标记这是一个非常类似的解决方案caverac 的方法

首先我们设置了五个“颜色类别”并声明每个节点都使用clique钥匙

最内层的节点将通过circular placement放置规则并分别属于两个类别。

\foreach循环中,这些内部节点将用于通过calc的库语法放置其他节点。“中间”节点将与内部节点正交放置,但距离仅为内部节点之间的 0.8 倍。然后,另一个第三个节点将与中间节点之间的中点正交放置。

所有这些节点都将被声明为五个集合之一,因此我们不必手动放置单个边。

代码

\documentclass[tikz, convert]{standalone}
\usetikzlibrary{graphs.standard, calc}
%\newcommand*\NextOf[2]{\pgfintmod{#1+1}{#2}}
\newcommand*\PrevOf[2]{\pgfintmod{#1-1}{#2}}
\begin{document}
\tikz\graph[
  no placement, empty nodes, nodes={circle, draw, fill, inner sep=+1.5pt},
  color class/.list={Set 0, Set ..., Set 4},
  clique/.list     ={Set 0, Set ..., Set 4}]{
  subgraph I_n[name=inner, V={0, ..., 4}, phase=0, counterclockwise=5,
    nodes={Set \tikzgraphnodename, Set \PrevOf{\tikzgraphnodename}{5}}],
  \foreach[evaluate={\j=int(mod(\i+1,5));}] \i in {0, ..., 4}{
    [nodes=Set \i]% or \j = \NextOf{\i}{5}
      middle \i a[at=($(inner \i)!.8!-90:(inner \j)$)],
      middle \i b[at=($(inner \j)!.8!+90:(inner \i)$)],
      outer \i c[at=($(middle \i a)!.5!(middle \i b)!1!-90:(middle \i b)$)]
  }
};
\end{document}

输出

在此处输入图片描述

相关内容