Ich habe mir eine Hilfskoordinate hilfps4 definiert um einen Pfad zwischen zwei Punkten zu zeichnen. Dieser soll zwei andere Pfade überbrücken.

Öffne in Overleaf
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning,arrows.meta,calc}

\colorlet{lcfree}{green}
\colorlet{lcnorm}{blue}
\colorlet{lccong}{red}

% globale Settings
\tikzset{
    base/.style={draw, on grid, align=center, minimum height=4ex},
    proc/.style={base, rectangle, text width=10em},
    var/.style={base, circle, text width=4ex},
    %% Stil für Hilfskoordinaten
    coord/.style={coordinate, on grid, node distance=6mm and 20mm},
    % Stile für Verbindungslinien
    norm/.style={->, draw, lcnorm},
    free/.style={->, draw, lcfree},
    cong/.style={->, draw, lccong},
    % Stil für Kreuzungen von Pfaden
    jump/.style args={(#1) to (#2) over (#3) by #4}{
        insert path={
            let \p1=($(#1)-(#3)$), \n1={veclen(\x1,\y1)}, 
            \n2={atan2(\y1,\x1)}, \n3={abs(#4)}, \n4={#4>0 ?180:-180}  in 
            (#1) -- ($(#1)!\n1-\n3!(#3)$) 
            arc (\n2:\n2+\n4:\n3) -- (#2)
        }
     }
    }

\begin{document}
\begin{tikzpicture}[%
    >={Triangle[angle=60:5pt]},% Form der Pfeilspitzen
    node distance=20mm and 30mm, % Vorgaben für Abstände zwischen Nodes in dieser Zeichnung
    every join/.style={norm},   % Default linetype for connecting boxes
    ]

\begin{scope}[nodes=var]
    \node (0) {0};
    \node [right=of 0] (a) {a};
    \node [right=of a] (b) {b};
    \node [right=of b] (c) {c};

    \node [below=of a] (d) {d};
    \node [below=of b] (e) {e};
\end{scope}

\begin{scope}[nodes=coord]
\node [below=of e] (hilf) {};% Hilfskoordinate für definierten Zusatzabstand
\node (hilfps) at (hilf-|c){};
\node [below=of hilfps] (hilfps2) {};
\end{scope}

\begin{scope}[nodes=proc]
    \node [below=of hilf] (f) {f};
    \node [below=of f] (g) {ggg};
    \node (h) at (0|-g) {hhh};
\end{scope}

\node [coord, right=12mm of h.north] (hilfps3){};
\node [coord] (hilfps4)  at (hilfps2-|hilfps3){};

% farbiges Markieren der Hilfspunkte
\foreach \coord/\color in {hilf/green,hilfps/orange,hilfps2/black,hilfps3/blue,hilfps4/violet}
    \node[\color]at(\coord){x};

\begin{scope}[every path/.append style=free]
    \foreach \start/\end in 
        {a/d,b/e,e/f,0/h,f/g,h/g}
        \path(\start)--(\end);
    \path (c)|-(f);
    \path (d)|-(f);
    \path (hilfps2)-|(hilfps3);
    %über Kreuz
    \path (a) -- coordinate(bd-ae) (e);
    \path [jump=(b) to (d) over (bd-ae) by 6pt];
        \path (e) -- coordinate(hilfps2hilfps4-ef) (f);
        \path [jump=(hilfps2) to (hilfps4) over (hilfps2hilfps4-ef) by 6pt];
\end{scope}
\end{tikzpicture}
\end{document}
  1. Das haut leider nicht ganz hin. Kann es an dem Pfad e-f liegen? Die Position der Überbrückung liegt verdächtig in der Mitte zwischen e (center) und f (center). Wie kann ich das Problem lösen?
  2. Welcher Befehl sorgt dafür, dass eine weitere Linie zwischen e-f ohne Überbrückung durchgezogen wird?
  3. Würde das auch ohne die Hilfskoordinate hilfps4 über "Eck" funktionieren?

gefragt 25 Okt '16, 13:45

SF6's gravatar image

SF6
15953440
Akzeptiert-Rate: 0%

bearbeitet 15 Mär '17, 07:53

saputello's gravatar image

saputello
11.1k174365


Zu 3.: Ja, die Hilfskoordinate hilfps4 kannst Du einsparen, siehe unten. Und auch hilfps und hilfps3 werden nicht wirklich gebraucht.

Zu 2.: Zwischen e und f zeichnest Du eine zweite Linie mit \path (e) -- coordinate(hilfps2hilfps4-ef) (f);, da dieser Pfad in der scope mit every path/.append style=free steht. Der Pfad wird aber gar nicht gebraucht.

Die Überbrückung liegt bei Dir in der Mitte zwischen e und f weil mit

Open in Online-Editor
\path (e) -- coordinate(hilfps2hilfps4-ef) (f);

die für die Überbrückung genutzte Koordinate hilfps2hilfps4 in der Mitte zwischen den beiden Nodes definiert wird.

Beide Überbrückungen auf dem Weg von hilfps2 zum Node h bekommst Du beispielsweise mit

Open in Online-Editor
\path 
    [jump={(hilfps2) to ($(hilfps2-|e)!-10pt!(hilfps2)$) over (hilfps2-|e) by 6pt}]
    [jump={($(hilfps2-|e)!-10pt!(hilfps2)$) to ([xshift=\abst]hilfps2-|h) over (hilfps2-|d) by 6pt}]
    --([xshift=\abst]h.north)
;

alt text

Code:

Open in Online-Editor
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning,arrows.meta,calc}

\colorlet{lcfree}{green}
\colorlet{lcnorm}{blue}
\colorlet{lccong}{red}

% globale Settings
\tikzset{
    base/.style={draw, on grid, align=center, minimum height=4ex},
    proc/.style={base, rectangle, text width=10em},
    var/.style={base, circle, text width=4ex},
    %% Stil für Hilfskoordinaten
    coord/.style={coordinate, on grid, node distance=6mm and 20mm},
    % Stile für Verbindungslinien
    norm/.style={->, draw, lcnorm},
    free/.style={->, draw, lcfree},
    cong/.style={->, draw, lccong},
    % Stil für Kreuzungen von Pfaden
    jump/.style args={(#1) to (#2) over (#3) by #4}{
        insert path={
            let \p1=($(#1)-(#3)$), \n1={veclen(\x1,\y1)}, 
            \n2={atan2(\y1,\x1)}, \n3={abs(#4)}, \n4={#4>0 ?180:-180}  in 
            (#1) -- ($(#1)!\n1-\n3!(#3)$) 
            arc (\n2:\n2+\n4:\n3) -- (#2)
        }
     }
    }

\begin{document}
\begin{tikzpicture}[%
    >={Triangle[angle=60:5pt]},% Form der Pfeilspitzen
    node distance=20mm and 30mm, % Vorgaben für Abstände zwischen Nodes in dieser Zeichnung
    every join/.style={norm},   % Default linetype for connecting boxes
    ]
\newcommand*\abst{12mm}% Abstand zwsichen den Pfeilspitzen oben auf Node h

\begin{scope}[nodes=var]
    \node (0) {0};
    \node [right=of 0] (a) {a};
    \node [right=of a] (b) {b};
    \node [right=of b] (c) {c};

    \node [below=of a] (d) {d};
    \node [below=of b] (e) {e};
\end{scope}

\begin{scope}[nodes=coord]
\node [below=of e] (hilf) {};% Hilfskoordinate für definierten Zusatzabstand
\node [below= of hilf-|c](hilfps2) {};
\end{scope}

\begin{scope}[nodes=proc]
    \node [below=of hilf] (f) {f};
    \node [below=of f] (g) {ggg};
    \node (h) at (0|-g) {hhh};
\end{scope}

\begin{scope}[every path/.append style=free]
    \foreach \start/\end in 
        {a/d,b/e,e/f,0/h,f/g,h/g}
        \path(\start)--(\end);
    \path (c)|-(f);
    \path (d)|-(f);
    \path (a)--(e);
    %über Kreuz
    \path [jump=(b) to (d) over ($(b)!.5!(d)$) by 6pt];
    \path 
        [jump={(hilfps2) to ($(hilfps2-|e)!-10pt!(hilfps2)$) over (hilfps2-|e) by 6pt}]
        [jump={($(hilfps2-|e)!-10pt!(hilfps2)$) to ([xshift=\abst]hilfps2-|h) over (hilfps2-|d) by 6pt}]
        --([xshift=\abst]h.north)
    ;
\end{scope}

% farbiges Markieren der Hilfspunkte
\foreach \coord/\color in {hilf/purple,hilfps2/orange}
    \node[\color]at(\coord){x};
\end{tikzpicture}
\end{document}

Wenn sich die Überbrückungsstellen nicht so einfach ermitteln lassen, kann es durchaus sein, dass Du doch die intersections Bibliothek laden und Schnittpunkte berechnen lassen musst.

Permanenter link

beantwortet 25 Okt '16, 15:25

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×731
×13
×7

gestellte Frage: 25 Okt '16, 13:45

Frage wurde gesehen: 6,523 Mal

zuletzt geändert: 25 Okt '16, 15:25