내 노드가 직선일 때 Tikz가 한 노드에서 다른 노드로 곡선 화살표를 만들도록 하려면 어떻게 해야 합니까?

내 노드가 직선일 때 Tikz가 한 노드에서 다른 노드로 곡선 화살표를 만들도록 하려면 어떻게 해야 합니까?

이 코드가 있습니다

\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}

이는 다음 그래프를 생성합니다.

나쁜 그래프

내 목표는 다음과 같은 그래프를 생성하는 것입니다.

좋은 그래프

나쁜 그림을 용서하십시오. 나는 다양한 조합을 시도했지만 (4) edge node [bend left] {} (1);소용 (4) edge node [loop left] {} (1);이 없었습니다.

답변1

또 다른 접근 방식을 보여주기 위해 이 사용 사례는 정확히 키 bend left와 키 bend right가 만들어진 이유입니다.

\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}

여기에 이미지 설명을 입력하세요

이러한 키는 및 키를 대칭적으로 <angle>동시에 설정하기 위한 선택적 값도 허용하므로 다음과 같이 작성합니다.inout

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

결과는 다음과 같습니다

여기에 이미지 설명을 입력하세요

in및 키 의 비대칭 설정이 out필요한 경우CFR의 솔루션가는 길입니다.

답변2

\draw한 가지 접근 방식은 들어오고 나가는 각도를 사용하고 지정하는 것입니다 . 간단히 노드 이름을 지정하면 노드 중심을 기준으로 경로가 구성됩니다(거기에서 그리지는 않지만). 노드 앵커를 지정할 수도 있습니다. 예를 들어 빨간색 선 (4.north)은 에 연결됩니다 (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}

여기에 이미지 설명을 입력하세요

답변3

그것이 문제라면 곡선을 그리는 방법에는 여러 가지가 있습니다. 다음은 하나입니다.

\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}

뒤로 곡선

다음은 각도를 약간 변경하여 \path원본 의 일부로 만드는 방법입니다 .edge

  \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);

경로 곡선의 가장자리

관련 정보