Guten Morgen,

ich würde gerne die vier Verbindungslinien in meiner Abbildung so zeichnen, dass diese quasi einen perfekten Kreis beschreiben. Damit deutlich wird, was ich meine, habe ich im MB einen Kreis eingefügt, der quasi als Vorlage für den path der vier Verbindungslinien dienen soll. D.h. die Verbindungslinien sollen über dem Kreis liegen, damit das Ganze ein wenig runder aussieht. Anschließend kann der Kreis entfernt werden, da er ja nur zur Veranschaulichung der Soll paths dient.

Vielen Dank für die Hilfe.

Open in Online-Editor
\documentclass{scrbook}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[ngerman]{babel}

\usepackage{pgfplots}
\pgfplotsset{compat=1.9}

\usepackage{tikz}
    \usetikzlibrary{intersections,positioning,arrows,calc,patterns,shapes.multipart,fit,backgrounds,decorations.pathreplacing}
    \tikzset{
        pfeil/.style={semithick,->,>=stealth,shorten >=5pt,shorten <=5pt,color=black},          % Definiert den Standardpfeil, 
    }

\begin{document}
\begin{tikzpicture}[
mysplit/.style={rectangle split,rectangle split parts=#1,draw,text width=4cm,minimum height=1cm,anchor=center,align=center},
myblock/.style={rectangle,draw,text width=4cm,minimum height=1cm,anchor=center,align=center},
]
% STELLSCHRAUBEN
\newcommand{\abstand}{4cm}

\node (circle1)[myblock]{};
\node (circlemitte)[myblock,draw=none,below=\abstand of circle1.north,anchor=center]{Mitte};
\node (circle3)[myblock,below=\abstand of circlemitte.center,anchor=south]{};
\node (circle2)[myblock,left=of circlemitte.west,anchor=east]{};
\node (circle4)[myblock,right=of circlemitte.east,anchor=west]{};

\draw [draw=red] ($(circlemitte.center)$) circle(4cm);
\draw [pfeil](circle1.west) to [out=180,in=90] (circle2.north);
\draw [pfeil](circle2.south) to [out=270,in=180] (circle3.west);
\draw [pfeil](circle3.east) to [out=0,in=270] (circle4.south);
\draw [pfeil](circle4.north) to [out=90,in=0] (circle1.east);
\end{tikzpicture}

\end{document}

alt text

gefragt 16 Dez '13, 07:17

josephine's gravatar image

josephine
944253035
Akzeptiert-Rate: 0%

bearbeitet 21 Jun '16, 17:40

saputello's gravatar image

saputello
11.1k174365

Nicht ganz einfach. Primitiverweise könntest du einfach erst den Kreis zeichnen und dann die Nodes mit fill=white überzeichnen. Alternativ kannst du den Kreis manuell nachzeichnen (out, in, etc.). Eine exakte Lösung muss entweder berechnet werden oder mithilfe der intersections-Library gefunden (und immer noch berechnet werden).

Liegen die Nodes absichtlich nicht mit ihrem Zentrum auf dem Kreis?

Wenn auch keine direkte Antwort auf deine Frage, sei hier mal das smartdiagram-Paket erwähnt.

(16 Dez '13, 15:19) Qrrbrbirlbel

Ich hab mal noch ein Bild zur Verdeutlichung des Problems eingefügt. Selbst wenn man den Kreis einfach unter die Boxen legt, sollen da ja wahrscheinlich dann auch noch die Pfeilspitzen hin ...

(16 Dez '13, 15:29) esdd

Zuerst eine sehr manuelle Lösung, die die Symmetrie ausnutzt und einen einfachen to path mit arcs verwendet. Ein start angle und ein delta angle mussten dazu empirisch gefunden werden.

Code

\documentclass[tikz]{standalone}
\usetikzlibrary{positioning,arrows}
\begin{document}
\begin{tikzpicture}[
  myblock/.style={
    rectangle, draw, text width=+4cm,
    minimum height=+1cm, align=center},
  node distance=+4cm, radius=+4cm]

\node [myblock, draw=none] (circ-m) {Mitte};
\draw [gray] (circ-m) circle [];

\node [myblock, above=of circ-m.center, below] (circ-1) {1};
\node [myblock, below=of circ-m.center, above] (circ-3) {3};
\node [myblock,  left=+1cm of circ-m]          (circ-2) {2};
\node [myblock, right=+1cm of circ-m]          (circ-4) {4};

\path[delta angle=45, -stealth', semithick, line cap=round,
  myarc/.style={to path={([shift=({##1}:+4cm)]\tikztostart) arc[start angle={##1}]}}]
  (circ-m) edge[myarc=10]     ()
           edge[myarc=90+35]  ()
           edge[myarc=10+180] ()
           edge[myarc=270+35] ();
\end{tikzpicture}
\end{document}

Und jetzt noch eine Lösung, die die intersections-Library verwendet.

Dazu werden sowohl den Nodes als auch dem Kreis Namen vergeben (der Kreis muss dazu nicht gezeichnet werden).

Da die Library auch Lösungen findet, die uns nicht interessieren, werden diese im by-Key übersprungen.

Meine qrr.misc-Library definiert die atanXY-Funktion. Mit TikZ 2.10 kann sie hier einfach mit atan2 ersetzt werden.

Code

\documentclass[tikz]{standalone}
\usetikzlibrary{positioning,arrows,intersections,qrr.misc,calc}
\begin{document}
\begin{tikzpicture}[
  myblock/.style={
    rectangle, draw, text width=+4cm,
    minimum height=+1cm, align=center},
  node distance=+4cm, radius=+4cm]

\node [myblock, draw=none] (circ-m) {Mitte};
\draw [name path=c, gray] (circ-m) circle [];

\node [name path=c1, myblock, above=of circ-m.center, below] (circ-1) {1};
\node [name path=c3, myblock, below=of circ-m.center, above] (circ-3) {3};
\node [name path=c2, myblock,  left=+1cm of circ-m]          (circ-2) {2};
\node [name path=c4, myblock, right=+1cm of circ-m]          (circ-4) {4};

\path[name intersections={of=c and c1, sort by=c, by={i-8,,,i-1}}]
     [name intersections={of=c and c2, sort by=c, by={i-2,i-3}}]
     [name intersections={of=c and c3, sort by=c, by={i-4,,,i-5}}]
     [name intersections={of=c and c4, sort by=c, by={i-7,i-6}}];

\foreach \i[evaluate={\j=int(\i+1)}] in {1,3,5,7}
  \draw[-stealth', semithick, line cap=round, shorten angle/.initial=2]
    let \p0=($(i-\i)-(circ-m)$), \p1=($(i-\j)-(circ-m)$) in
    ([rotate around=\pgfkeysvalueof{/tikz/shorten angle}:(circ-m)] i-\i)
      arc[start angle={atanXY(\p0)+ \pgfkeysvalueof{/tikz/shorten angle}},
            end angle={atanXY(\p1)-(\pgfkeysvalueof{/tikz/shorten angle})}];
\end{tikzpicture}
\end{document}

Output

alt text

Permanenter link

beantwortet 16 Dez '13, 18:01

Qrrbrbirlbel's gravatar image

Qrrbrbirlbel
2.9k3815
Akzeptiert-Rate: 53%

bearbeitet 17 Dez '13, 00:20

Danke! Ich habe es mit der manuellen Version versucht und es klappt auch in meiner Originalgrafik ohne Probleme. Vielen Dank für die super Unterstützung!

(19 Dez '13, 08:29) josephine
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
×20

gestellte Frage: 16 Dez '13, 07:17

Frage wurde gesehen: 10,124 Mal

zuletzt geändert: 21 Jun '16, 17:40