在 TikZ 中创建程序生成的节点

在 TikZ 中创建程序生成的节点

我对 Ti 比较陌生Z,并且一直在从互联网上的各种例子中拼凑我需要的图形,以便完成大学作业。

现在我正在开展研究,我必须写更多的东西并制作更多更复杂的图形,我想也许是时候学习如何正确地做事了。

下面是我想要制作的图形类型的示例:

分割网络

它们之间有很多节点和连接。

我能够使用 Ti 重现此图Z 是通过单独放置每个节点,然后为每个节点单独创建一个连接来实现的,然而这非常耗时,而且我需要创建更大的数字和更多的连接,这将更加耗时。

我想知道有什么更聪明的方法来生成具有许多特征的大型图形,但结构相当简单(例如,大型节点矩阵,其连接从一列中的每个节点延伸到下一列中的每个节点)?

在一些事情中,我看到人们使用矩阵来定位节点,也可以在 Ti 中使用 for 循环和 if 语句Z 也是如此,但是必须深入研究并尝试理解 Ti 的整个语言除了我正在尝试做的其他工作之外,Z 本身对我来说有点令人生畏 - 所以如果有人知道任何好的例子或资源,可以提供一些关于对我的目的有用的技术的高级信息,或者甚至只是一些关于从哪里开始的提示,我将不胜感激。

答案1

尽管使用多个\foreach循环确实会使网络的“语义”布局有点不清晰,但它确实使其创建更容易。我对所需的连接进行了一些改动,否则网络看起来会有点混乱。

\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{arrows.meta,calc}
\begin{document}
\begin{tikzpicture}[>=Triangle,
   cell/.style={circle, draw},
   connection/.style={shorten >=.125cm, shorten <=.125cm},
]

\foreach \i in {1,...,8}
  \foreach \x [count=\j] in {1,2,5,6,7}
    \node [cell] (cell-\i-\j) at (\x*1.5, \i) {};

\node [cell, draw=none, below=1cm] (cell')  at ($(cell-1-4)!0.5!(cell-1-5)$) {};
\node [cell, draw=none, above=1cm] (cell'') at ($(cell-8-4)!0.5!(cell-8-5)$) {};

\foreach \i in {1,...,8}{
  \foreach \j in {1,3} \draw [->] (cell-\i-\j)++(-1,0) -- (cell-\i-\j);
  \foreach \j in {2,5} \draw [<-] (cell-\i-\j)++(1,0) -- (cell-\i-\j);
}

\foreach \m/\n/\o/\p in {1/4/1/2,5/8/1/2, 3/6/1/2, 1/4/3/4, 5/8/3/4, 3/6/4/5}
  \foreach \i in {\m,...,\n}
    \foreach \j in {\m,...,\n} \draw [connection] (cell-\i-\o) -- (cell-\j-\p);

\foreach \m/\n/\q in {1/2/', 7/8/''}
  \foreach \i in {\m,\n}{
    \draw [connection] (cell-\i-4) -- (cell-\i-5);
    \foreach \j in {4,5} \draw [connection] (cell\q) -- (cell-\i-\j);
  }

\coordinate (@')  at ($(cell') +(5/4,-1/2)$);
\coordinate (@'') at ($(cell'')+(5/4, 1/2)$);
\draw [<->] (cell'.center) |- (@') -- (@'') -| (cell''.center);

\node [above left=.5cm]  at (cell-8-1) {in};
\node [above right=.5cm] at (cell-8-2) {out};

\node [above left=.5cm]  at (cell-8-3) {in};
\node [above right=.5cm] at (cell-8-5) {out};

\draw [Implies-Implies, double, thick, double distance=5pt, 
  shorten >=1.25cm, shorten <=1.25cm] 
  ($(cell-4-2)!0.5!(cell-5-2)$) -- ($(cell-4-3)!0.5!(cell-5-3)$)
  node [midway, above=1cm, font=\large] {?};

\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容