Tikz: Выстраивание входных и выходных узлов в диаграмме с несколькими входами и несколькими выходами

Tikz: Выстраивание входных и выходных узлов в диаграмме с несколькими входами и несколькими выходами

Я пытаюсь нарисовать диаграмму в стиле «множественный вход — множественный выход», используя код, который использует следующую структуру:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}


\begin{document}

\begin{tikzpicture}
\tikzset{packet/.style={rectangle, draw, very thick, minimum size=8mm, rounded corners=1mm, fill=blue!50!white!30}}
\tikzset{mixing/.style={rectangle, draw, very thick, minimum width=35ex, rounded corners=1mm, fill=red!70!orange!30,rotate=90}}

\node[packet] (A) at (0,0) {Node A};
\node[packet] (B) [right=2cm of A] {Node B};
\node[mixing] (pro) at ($(A) !.5! (B) + (0.0,-1.0)$) {Multiple Input Multiple Output process};

\node[packet] (C) at (0.0,-2.1) {Node C};
\node[packet] (D) [right=2cm of C] {Node D};

\draw[->] (A.east) -- (B.west);
\draw[->] (C.east) -- (D.west);
\end{tikzpicture}
\end{document} 

что дает следующую диаграмму: введите описание изображения здесь

Мне бы хотелось узнать, как нарисовать стрелки так, чтобы «процесс множественного входа и множественного выхода» делил линию пополам и разделял ее на две части, чтобы одна стрелка входила в процесс слева (например, из узла A), а другая выходила справа (например, в узел B).

Мне известны обозначения, задающие вход/выход линии в узел (что-то вроде name_of_node.180, где 180 указывает угол входа/выхода в узел относительно центра узла), например здесьБлок-схемы Компоненты Multi Input - Multi Output в TikZ

Однако возможно ли заставить точки входа и выхода стрелок узла «процесс» быть «на одном уровне» с парой узлов (A и B или C и D)? (По сути, на схеме ниже это выглядит так, как будто узел процесса делит стрелки пополам, разделяя их на две части, как упоминалось ранее).

решение1

Вы можете использовать перпендикулярную систему координат:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}


\begin{document}

\begin{tikzpicture}
\tikzset{packet/.style={rectangle, draw, very thick, minimum size=8mm, rounded corners=1mm, fill=blue!50!white!30}}
\tikzset{mixing/.style={rectangle, draw, very thick, minimum width=35ex, rounded corners=1mm, fill=red!70!orange!30,rotate=90}}

\node[packet] (A) at (0,0) {Node A};
\node[packet] (B) [right=2cm of A] {Node B};
\node[mixing] (pro) at ($(A) !.5! (B) + (0.0,-1.0)$) 
  (mult) {Multiple Input Multiple Output process};

\node[packet] (C) at (0.0,-2.1) {Node C};
\node[packet] (D) [right=2cm of C] {Node D};

\draw[->] (A.east) -- (mult.north|-A.east);
\draw[->] (mult.south|-A.east) -- (B.west);
\draw[->] (C.east) -- (mult.north|-C.east);
\draw[->] (mult.south|-C.east) -- (D.west);
\end{tikzpicture}
\end{document} 

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

Лучшей альтернативой является использование:

\draw[->] (A.east) -- (mult.north|-A.east);
\draw[->] (mult.south|-A.east) -- (B.west|-A.east);
\draw[->] (C.east) -- (mult.north|-C.east);
\draw[->] (mult.south|-C.east) -- (D.west|-C.east);

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