Нарисуйте (очень простую) топологию сети с помощью tikz

Нарисуйте (очень простую) топологию сети с помощью tikz

Я пытаюсь нарисовать несколько простейших топологий сетей и подумал, что стоит попробовать использовать для этого Tikz.

Поэтому я подумал, что начну с себя, а потом попрошу о помощи, так как мне нужно сделать 5 таких дел, и нет смысла делать их все в обратном порядке.

Вот мой MWE:

\documentclass[11pt,a4paper,oneside]{book}
\usepackage{tikz}
\begin{document}
\begin{center}
\def\a{.4}
\begin{figure}

\begin{tikzpicture}
\draw (2,-1) circle (\a cm);
\draw (2,-1) -- (2,0);
\draw (4,-1) circle (\a cm);
\draw (4,-1) -- (4,0);
\draw (1,1) circle (\a cm);
\draw (1,1) -- (1,0);
\draw (3,1) circle (\a cm);
\draw (3,1) -- (3,0);
\draw (5,1) circle (\a cm);
\draw (5,1) -- (5,0);
\draw (0,0) -- (6,0);

\end{tikzpicture}
\caption{Bus Network Topology}

\end{figure}
\end{center}
\end{document}

Так что для начала это выглядит немного странно, не то центрирование, на которое я надеялся.

введите описание изображения здесь

Также он помещает рисунок в следующий \section{}, потому что это float и LaTeX делает с ними то, что хочет. Если есть какие-либо предложения о том, как бороться с этой неплотностью, это было бы здорово. Думаю, я сделал его float, используя begin{figure}, но я хотел подписать его.

Было бы неплохо добавить сюда немного цвета, только однотонный тон в эллипсах (скрыл бы соединительные линии)

Я собираюсь нарисовать Сетку, Дерево, Звезду, Кольцо и Автобус, как они изображены здесь.

введите описание изображения здесь

В любом случае, спасибо!

решение1

автобусная сеть

Вот один из способов нарисовать сеть:

\documentclass[11pt,a4paper,oneside]{book}
\usepackage{tikz}
\begin{document}
    \def\ab{.4}
    \tikzset{
      net node/.style = {circle, minimum width=2*\ab cm, inner sep=0pt, outer sep=0pt, ball color=blue!50!cyan},
      net connect/.style = {line width=1pt, draw=blue!50!cyan!25!black},
      net thick connect/.style = {net connect, line width=2.5pt},
    }
    \begin{figure}
      \centering
      \begin{tikzpicture}
        \path [net thick connect]
          (0,0) -- (6,0);
      \foreach \i/\j in {2/-1,4/-1,1/1,3/1,5/1}
      \path [net connect] (\i,0) -- (\i,\j) node [net node] {};
      \end{tikzpicture}
      \caption{Bus Network Topology}
    \end{figure}
\end{document}

Обратите внимание, что нет смысла помещать figureокружение center. Вместо этого используйте \centeringвнутри figureдля центрирования диаграммы. Я настроил несколько стилей, так как это упрощает поддержание единообразия и изменение, скажем, цвета всех узлов, если вам это нужно. Я также использовал цикл для рисования узлов.

Есть много способов сделать это, но этот, как мне кажется, будет довольно легко адаптировать к другим сетевым диаграммам, тогда как некоторые другие методы не так легко обобщить.

Обратите внимание, что \aэто существующая команда. Используйте \newcommandвместо \defдля проверки такого рода проблем. Я заменил , \abкоторая еще не занята.

Для некоторых сетей может быть проще использовать полярные координаты для указания местоположений узлов. Например, рассмотрим звезду, которая по сути представляет собой узлы, размещенные по окружности вокруг узла-концентратора:

звездная сеть

Было бы сложно рассчитать положения узлов в системе, использованной выше, но полярные координаты делают диаграмму простой:

  \newcommand*\ab{.4}
  \tikzset{
    net node/.style = {circle, minimum width=2*\ab cm, inner sep=0pt, outer sep=0pt, ball color=blue!50!cyan},
    net root node/.style = {net node, minimum width=3*\ab cm},
    net connect/.style = {line width=1pt, draw=blue!50!cyan!25!black},
  }
  \begin{figure}
    \centering
    \begin{tikzpicture}
      \node (root) [net root node] {};
      \foreach \i in {0,...,4}
        \path [net connect] (root) -- (-90+\i*72:2) node [net node] {};
    \end{tikzpicture}
    \caption{Star Network Topology}
  \end{figure}

Кольцо и сетка очень похожи:

кольцевая сеть ячеистая сеть

  \begin{figure}
    \centering
    \begin{tikzpicture}
      \foreach \i in {0,...,4}
        \path (-90+\i*72:2) node (n\i) [net node] {};
      \path [net connect] (n0) -- (n1) -- (n2) -- (n3) -- (n4) -- (n0);
    \end{tikzpicture}
    \caption{Ring Network Topology}
  \end{figure}
  \begin{figure}
    \centering
    \begin{tikzpicture}
      \foreach \i in {0,...,4}
        \path (-90+\i*72:2) node (n\i) [net node] {};
      \foreach \i in {0,...,4}
        \foreach \j in {0,...,4}
          \path [net connect]
            (n\i) -- (n\j);;
    \end{tikzpicture}
    \caption{Mesh Network Topology}
  \end{figure}

Для дерева я бы совершенно излишне использовал forest, но заметьте, что это совершенно вопиющее! Я бы сделал это, потому что это дерево и forestоно фантастическое, а не потому, что для такой простой диаграммы нужна мощь forest....

сеть деревьев

\documentclass[11pt,a4paper,oneside]{book}
\usepackage{tikz,forest}
\begin{document}
  \addtocounter{figure}{4}
  \newcommand*\ab{.4}
  \tikzset{
    net node/.style = {circle, minimum width=2*\ab cm, inner sep=0pt, outer sep=0pt, ball color=blue!50!cyan},
    net root node/.style = {net node, minimum width=3*\ab cm},
    net connect/.style = {line width=1pt, draw=blue!50!cyan!25!black},
  }
  \begin{figure}
    \centering
    \begin{forest}
      for tree={
        edge=net connect,
        if level=0{%
          net root node,
          before typesetting nodes={
            repeat=2{
              append={[,
                net node,
                repeat=3{
                  append={[, net node]},
                },
              ]},
            },
          },
        }{},
      }
      []
    \end{forest}
    \caption{Tree Network Topology}
  \end{figure}
\end{document}

Что мне здесь нравится, так это то, что на самом деле дерево рисуется всего лишь одним набором квадратных скобок!

Гибрид более кропотливый, так как в нем меньше шаблона. Я работал с шаблоном кольца и добавлял оставшиеся узлы вручную с помощью библиотеки calcдля TikZ.

гибридная сеть

  \usetikzlibrary{calc}

  ...

  \begin{figure}
    \centering
    \begin{tikzpicture}
      \foreach \i in {0,...,4}
        \path (-90+\i*72:2) node (n\i) [net node] {};
      \path [net connect]
        (n0)
          edge node [net node, pos=1] {} +(0,-15mm)
          edge node [net node, pos=1] {} +(10mm,-15mm)
          edge node [net node, pos=1] {} +(-10mm,-15mm)
          -- (n1)
          edge (n4)
          edge (n3)
          -- (n2)
          -- (n3)
          -- (n4)
          -- (n0)
          ($(n2)!1/2!(n3)$) -- +(0,15mm) node [net node] {}
        ;
    \end{tikzpicture}
    \caption{Hybrid Network Topology}
  \end{figure}

Связанный контент