1

I am trying to draw the following diagram in TikZ:

Desired TikZ diagram

I have written the following code but I am not sure how to do the two curved lines for P1 and P3:

\documentclass[11pt,a4paper]{report}

\usepackage[USenglish]{babel} 
\usepackage[T1]{fontenc}
\usepackage[ansinew]{inputenc}
\usepackage{lmodern} 

\usepackage{tikz}
\usetikzlibrary{positioning,fit,backgrounds}

\begin{document}

\title{Test}
\author{Thomas Offer}
\date{\today}
\begin{figure}[h!]
\centering
\begin{tikzpicture}[scale=1,thick,main node/.style={rectangle,draw,minimum width=2cm,minimum height=2cm}]
    \node[main node,label=below:$M_1$] (M1) at (3,2) {};
    \node[main node,label=below:$M_2$] (M2) at (7,2) {};
    \node[main node,label=below:$M_3$] (M3) at (11,2) {};
    \draw[->] (0,2) node[left] {$P_2$} -- (14,2);
\end{tikzpicture}
\caption{Tikz test picture}
\end{figure}
\end{document}

I have tried using draw with controls but to no avail. Any help appreciated!

Tom Offer
  • 181

1 Answers1

3

One option could be a curve through command from hobby tikzlibrary.

An example which will need to adjust curves according your taste

\documentclass[11pt,a4paper]{report}

\usepackage[USenglish]{babel} 
\usepackage[T1]{fontenc}
\usepackage[ansinew]{inputenc}
\usepackage{lmodern} 


\usepackage{tikz}
\usetikzlibrary{positioning,fit,backgrounds,hobby}

\begin{document}

\title{Test}
\author{Thomas Offer}
\date{\today}
\begin{figure}[h!]
\centering
\begin{tikzpicture}[scale=1,thick,main node/.style={rectangle,draw,minimum width=2cm,minimum height=2cm}]
    \node[main node,label=below:$M_1$] (M1) at (3,2) {};
    \node[main node,label=below:$M_2$] (M2) at (7,2) {};
    \node[main node,label=below:$M_3$] (M3) at (11,2) {};
    \draw[->] (0,2) node[left] (P2) {$P_2$} -- (14,2);
    \node[below=2cm of P2] (P3){$P3$};
    \node[above=2cm of M1] (P1){$P1$};
    \path (P1-|M3.north east)--++(0:2cm) coordinate (aux);
    \draw[->] (P3.north) to[curve through={ ([xshift=-5mm]M1.210)..([xshift=5mm]M1.-20) ..([xshift=5mm]M2.200) ([xshift=5mm]M2.-30)}] (P3-|M3.south west);
    \draw[->] (P1.south) to[curve through={ ([xshift=-5mm]M2.150)..([xshift=5mm]M2.20) ..([xshift=5mm]M3.160) ([xshift=5mm]M3.30)}] (aux);
\end{tikzpicture}
\caption{Tikz test picture}
\end{figure}
\end{document}

enter image description here

Henri Menke
  • 109,596
Ignasi
  • 136,588
  • Thanks for the answer! I'm not familiar with the hobby library. Can you possibly explain the syntax e.g. [xshift=-5mm]M1.210), so I can edit it myself? – Tom Offer Apr 23 '15 at 18:05
  • 1
    @TomOffer This is tikz syntax, not hobby. x|y shifts displaces the coordinate. M1.210 means the coordinate on node's border at angle 210 – Ignasi Apr 23 '15 at 18:49