%20%D1%82%D0%BE%D0%BF%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8E%20%D1%81%D0%B5%D1%82%D0%B8%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20tikz.png)
Я пытаюсь нарисовать несколько простейших топологий сетей и подумал, что стоит попробовать использовать для этого 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}