我对 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}