Como faço para que o Tikz faça uma seta curva de um nó para outro quando meus nós estão em linha reta?

Como faço para que o Tikz faça uma seta curva de um nó para outro quando meus nós estão em linha reta?

Eu tenho esse código

\documentclass[10pt]{article}

\usepackage{tikz}
\usetikzlibrary{arrows}

\begin{document}

\begin{tikzpicture}[->,>=stealth',auto,node distance=3cm,
  thick,main node/.style={circle,draw,font=\sffamily\Large\bfseries}]

  \node[main node] (1) {a};
  \node[main node] (2) [right of=1] {b};
  \node[main node] (3) [right of=2] {c};
  \node[main node] (4) [right of=3] {d};

  \path[every node/.style={font=\sffamily\small}]
    (1) edge node [right] {} (2)
    (2) edge node [right] {} (3)
    (3) edge node [right] {} (4)
    (4) edge node [left] {} (1);
\end{tikzpicture}
\end{document}

que produz este gráfico:

gráfico ruim

Meu objetivo é produzir um gráfico como este:

bom gráfico

Perdoe o desenho ruim. Tentei várias combinações (4) edge node [bend left] {} (1);e (4) edge node [loop left] {} (1);sem sucesso.

Responder1

Apenas para mostrar outra abordagem, este caso de uso é exatamente para o qual as chaves bend lefte bend rightforam criadas:

\documentclass[10pt]{article}

\usepackage{tikz}
\usetikzlibrary{arrows}

\begin{document}

\begin{tikzpicture}[->,>=stealth',auto,node distance=3cm,
  thick,main node/.style={circle,draw,font=\sffamily\Large\bfseries}]

  \node[main node] (1) {a};
  \node[main node] (2) [right of=1] {b};
  \node[main node] (3) [right of=2] {c};
  \node[main node] (4) [right of=3] {d};

  \path[every node/.style={font=\sffamily\small}]
    (1) edge node [right] {} (2)
    (2) edge node [right] {} (3)
    (3) edge node [right] {} (4)
    (4) edge[bend right] node [left] {} (1);
\end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

Essas chaves também aceitam um <angle>valor opcional para definir simultaneamente as teclas ine outsimetricamente, portanto, escrever

(4) edge[bend right=90] node [left] {} (1);

vai resultar em

insira a descrição da imagem aqui

Se for necessária uma configuração assimétrica das teclas ine ,outsolução do cfré o caminho a seguir.

Responder2

Uma abordagem é usar \drawe especificar os ângulos de entrada e saída. A simples especificação dos nomes dos nós construirá o caminho em relação ao centro do nó (embora não desenhe a partir daí). Você também pode especificar âncoras de nó. Por exemplo, a linha vermelha se conecta (4.north)a (1.north).

\documentclass[10pt]{article}
\usepackage{tikz}
\usetikzlibrary{arrows}

\begin{document}
\begin{tikzpicture}[->,>=stealth',auto,node distance=3cm,
  thick,main node/.style={circle,draw,font=\sffamily\Large\bfseries}]
\node[main node] (1) {a};
\node[main node] (2) [right of=1] {b};
\node[main node] (3) [right of=2] {c};
\node[main node] (4) [right of=3] {d};

\draw [->] (1) -- (2);
\draw [->] (2) -- (3);
\draw [->] (3) -- (4);
\draw [->] (4) to [out=150,in=30] (1);
\draw [->,red] (4.north) to [out=150,in=30] (1.north);
\end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

Responder3

Existem várias maneiras de desenhar curvas, se essa for a questão. Aqui está um:

\documentclass[tikz]{standalone}

\usetikzlibrary{arrows}

\begin{document}

\begin{tikzpicture}
  [
    ->,
    >=stealth',
    auto,node distance=3cm,
    thick,
    main node/.style={circle, draw, font=\sffamily\Large\bfseries}
    ]

  \node[main node] (1) {a};
  \node[main node] (2) [right of=1] {b};
  \node[main node] (3) [right of=2] {c};
  \node[main node] (4) [right of=3] {d};

  \path[every node/.style={font=\sffamily\small}]
    (1) edge node [right] {} (2)
    (2) edge node [right] {} (3)
    (3) edge node [right] {} (4);
  \draw
    (4) [out=150, in=20] to  (1);
\end{tikzpicture}
\end{document}

curva para trás

Aqui está uma maneira de torná-lo parte do original \pathusando edge(e variando um pouco os ângulos):

  \path[every node/.style={font=\sffamily\small}]
    (1) edge node [right] {} (2)
    (2) edge node [right] {} (3)
    (3) edge node [right] {} (4)
    (4) edge [out=150, in=90]  (1);

borda em curvas de caminho

informação relacionada