PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Graph zeichnen mit doppelten "Kanten"



MrMilk
14-05-2011, 18:32
Hallo,

ich möchte einen Graph Zeichen der ungefähr wie das Haus vom Nikolaus aussieht. Dazu habe ich mich über das tikz Paket informiert und folgendes gebaut:


\begin{tikzpicture}[scale=1.5,auto=left,every node/.style={circle,fill=blue!20}]
\node (n1) at (1,1) {1};
\node (n2) at (1,2) {2};
\node (n3) at (2,2) {3};
\node (n4) at (2,1) {4};
\node (n5) at (3,1.5) {5};
\node (n6) at (4,1.5) {6};

\foreach \from/\to in {n1/n2,n2/n3,n3/n4,n4/n1,n3/n5,n4/n5,n5/n6}
\draw (\from) -- (\to);

\end{tikzpicture}

Vielleicht ein paar Worte zum Hintergrund: Die Kanten zwischen den Knoten sind Kommunikationskanäle. Mein Ziel ist es zu zeigen das eine Nachricht von 1 nach 2 geschickt wird. Ich hätte gerne neben dem Kanal/Kante einen kleinen Pfeil der von 1 nach 2 zeigt mit der der Beschriftung m. Der Pfeil soll aber nicht so lang wie der komplette Kanal/Kante sein.

Könnt ihr mir vielleicht weiterhelfen?


Viele Grüße,
MM

esdd
14-05-2011, 20:30
Hallo,

hier ist ein Vorschlag:

\documentclass{scrartcl}

\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}[scale=1.5,auto=left,every node/.style={circle,fill=blue!20}]
\node (n1) at (1,1) {1};
\node (n2) at (1,2) {2};
\node (n3) at (2,2) {3};
\node (n4) at (2,1) {4};
\node (n5) at (3,1.5) {5};
\node (n6) at (4,1.5) {6};
%
\foreach \from/\to in {n1/n2,n2/n3,n3/n4,n4/n1,n3/n5,n4/n5,n5/n6}
\draw (\from) -- (\to);
% Pfeil von n1 nach n2 im Abstand 1mm und mit der Länge 2x2mm
\coordinate(Mitte)at($(n1)!0.5!(n2)$);
\draw[->]($($(Mitte)!2mm!(n1)$)!1mm!270:(n1)$)%
--node[fill=none,label=left:m]{}($($(Mitte)!2mm!(n2)$)!1mm!90:(n2)$);
\end{tikzpicture}
\end{document}

Gruß
Elke

MrMilk
15-05-2011, 13:11
Hallo Elke,

vielen Dank für deinen Vorschlag. Vermutlich sind meine LaTeX
Kenntnisse noch nicht ausreichend, aber was meinst du mit
"Mitte"? Leider compiliert es nicht.

Viele Grüße,
MM

esdd
15-05-2011, 17:08
Hallo,

bei mir kompiliert das Beispiel fehlerfrei. Ich habe miktex 2.9 auf aktuellem Stand, d.h. ich verwende die tikz-Version 2.1 vom 13.10.2010.

"Mitte" war eine Hilfskoordinate in der Mitte zwischen den beiden Noden n1 und n2. Um die Endpunkte des Pfeiles zu berechnen, bin ich von dieser Koordinate auf beide Noden jeweils 2mm zu gegangen und dann noch 1mm senkrecht dazu.

Die Endpunkte des Pfeiles lassen sich aber auch ausgehend von n1.north (dem nördlichen Rand der Node n1) und n2.south festlegen:


\documentclass{scrartcl}

\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}[scale=1.5,auto=left,every node/.style={circle,fill=blue!20}]
\node (n1) at (1,1) {1};
\node (n2) at (1,2) {2};
\node (n3) at (2,2) {3};
\node (n4) at (2,1) {4};
\node (n5) at (3,1.5) {5};
\node (n6) at (4,1.5) {6};
%
\foreach \from/\to in {n1/n2,n2/n3,n3/n4,n4/n1,n3/n5,n4/n5,n5/n6}
\draw (\from) -- (\to);
% Pfeil von n1 nach n2 im Abstand 1mm und 2x0.75mm kürzer als direkte Verbindung
\draw[->]($($(n1.north)!0.75mm!(n2)$)!1mm!90:(n2)$)%
--node[fill=none,label=left:m]{}($($(n2.south)!0.75mm!(n1)$)!1mm!270:(n1)$);
\end{tikzpicture}
\end{document}

Gruß
Elke