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{}また、これはフロートなので、LaTeX はそれを好きなように扱うため、次の に描画を配置します。この緩みに対処する方法について何か提案があれば、それは素晴らしいことです。 を使用してフロートにしたと思いますbegin{figure}が、キャプションを付けたかったのです。

これに色を追加すると良いでしょう。楕円にはフラットな 1 トーンのみを使用します (接続線が隠れます)

ここに描かれているように、メッシュ、ツリー、スター、リング、バスを描きます。

ここに画像の説明を入力してください

とりあえずありがとう!

答え1

バスネットワーク

ネットワークを描く方法の 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。代わりに、図を中央\centeringfigure配置するには、 within を使用します。いくつかのスタイルを設定しました。これにより、一貫性を保ちやすくなり、必要に応じてすべてのノードの色を変更することが容易になります。また、ループを使用してノードを描画しました。

これを行う方法はたくさんありますが、この方法は他のネットワーク図に簡単に適応できるはずです。一方、他の方法のいくつかはそれほど簡単に一般化できないと思います。

\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ありません。forestforest

ツリーネットワーク

\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}

もちろん、これが気に入っている点は、実際にツリーを描画するのは、単一の角括弧セットになるということです。

ハイブリッドはパターンが少ないため、より扱いにくいです。私はリング パターンから作業し、calcTikZ のライブラリの助けを借りて、残りのノードを手動で追加しました。

ハイブリッドネットワーク

  \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}

関連情報