Code

Code

Ich versuche, die (nicht ganz so schöne) Abbildung unten nachzubilden

Bildbeschreibung hier eingeben

Mit dem Code am Ende des Beitrags konnte ich die folgende Lösung finden

Bildbeschreibung hier eingeben

Ich habe einige Kritikpunkte an dieser Lösung, die hoffentlich gelöst werden können

  • Können die drei diagonalen Pfeile (der Pfad von A ->- C, B ->- E und D ->- F) parallel sein?
  • Ich habe Code aus der folgenden Frage verwendet:TikZ: Wie zeichne ich einen Pfeil in die Mitte der Linie?um die Pfeile in der Mitte zu erstellen. Dies scheint jedoch eine enorme Überkomplikation zu sein. Gibt es eine einfachere Lösung?
  • Ebenso schien es unnötig, jeden einzelnen Knoten zu definieren. Kann dies mithilfe einer Schleife erfolgen?
  • Alle anderen Lösungen zur Neuerstellung des Bildes sind herzlich willkommen.

Code

\documentclass[tikz]{standalone}
\usetikzlibrary{decorations.pathreplacing,
decorations.markings,
positioning}
\tikzset{
  % style to apply some styles to each segment of a path
  on each segment/.style={
    decorate,
    decoration={
      show path construction,
      moveto code={},
      lineto code={
        \path [#1]
        (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast);
      },
      curveto code={
        \path [#1] (\tikzinputsegmentfirst)
        .. controls
        (\tikzinputsegmentsupporta) and (\tikzinputsegmentsupportb)
        ..
        (\tikzinputsegmentlast);
      },
      closepath code={
        \path [#1]
        (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast);
      },
    },
  },
  % style to add an arrow in the middle of a path
  mid arrow/.style={postaction={decorate,decoration={
        markings,
        mark=at position .5 with {\arrow[#1]{stealth}}
      }}},
}

\usepackage[utf8]{inputenc}

\begin{document}

\begin{tikzpicture}[
    every node/.style={draw,circle}]

\node (A) at (0,0) {$A$};
\node[label=above:{$\$\,1$},above right= of A] (B) {$B$};
\node[label=below:{$\$\,2$},below right= of A] (C) {$C$};
\node[label=above:{$\$\,2$},right= of B] (D) {$D$};
\node[label=below:{$\$\,1$},right= of C] (E) {$E$};
\node[above right= of E] (F) {$F$};

\path [draw,postaction={on each segment={mid arrow}}]
(A) -- (B)%
(A) -- (C)%
(B) -- (D)%
(B) -- (E)%
(C) -- (E)%
(D) -- (F)%
(E) -- (F)%
;

\end{tikzpicture}

\end{document}

Antwort1

Zeichnen Sie es als regelmäßiges Sechseck.

Bildbeschreibung hier eingeben

\documentclass[tikz]{standalone}
\usetikzlibrary{decorations.pathreplacing,decorations.markings,positioning}
\tikzset{
 mid arrow/.style={draw, postaction={decorate},
 decoration={
    markings, mark=at position 0.5 with {\arrow{stealth}}}},
 every node/.style={draw,circle}}

\begin{document}
\begin{tikzpicture}
\node (F) at (0:2) {$F$};
\node (D) at (60:2) {$D$};
\node (B) at (120:2) {$B$};
\node (A) at (180:2) {$A$};
\node (C) at (240:2) {$C$};
\node (E) at (300:2) {$E$};

\path [mid arrow] (A) -- (B);
\path [mid arrow] (A) -- (C);%
\path [mid arrow] (B) -- (D);%
\path [mid arrow] (B) -- (E);%
\path [mid arrow] (C) -- (E);%
\path [mid arrow] (D) -- (F);%
\path [mid arrow] (E) -- (F);
\end{tikzpicture}
\end{document}

Antwort2

So was?

Bildbeschreibung hier eingeben

Bei regelmäßigen Polygonen (in Ihrem Fall Sechsecke) sind die gegenüberliegenden Seiten parallel:

\documentclass[tikz, margin=3mm]{standalone}
\usetikzlibrary{decorations.markings,
                positioning,
                shapes.geometric}

\begin{document}

\begin{tikzpicture}[
     node distance = 12mm and 12mm,
     vertex/.style = {circle, draw, fill=white, minimum size=1em, inner sep=1pt}, 
        decoration = {markings, mark=at position .5 with {\arrow{stealth}}},
 every edge/.style = {draw, postaction={decorate}},
every label/.style = {inner sep=1pt, font=\footnotesize}
                    ]
\node (s) [regular polygon, 
           regular polygon sides=6,
           minimum size=44mm] {}; % coordinates for nodes
\foreach \i/\j [count=\k] in {D/\$\,2,B/\$\,1,A/,C/\$\,2,E/\$\,1,F/} % loop for nodes
\node (v\k) [vertex, label={\k*60}:\j] at (s.corner \k) {$\i$};
\draw  (v1) edge (v2);
\draw  (v2) edge (v3);
\draw  (v3) edge (v4);
\draw  (v4) edge (v5);
\draw  (v5) edge (v6);
\draw  (v6) edge (v1);
%
\draw  (v2) edge (v5);
    \end{tikzpicture}
\end{document}

Bearbeiten: Kanten um Polygone können Sie mit einer Schleife zeichnen:

\foreach \i in {0,...,5}
{
\pgfmathsetmacro{\j}{int(Mod(\i,6)+1)}
\pgfmathsetmacro{\k}{int(Mod(\i+1,6)+1)}
\draw  (v\j)  edge (v\k);
}

da in Ihrem Fall das Polygon ein Sechseck ist, ist der Code nicht viel kürzer :-) als zuvor.

verwandte Informationen