Петля с бриллиантом (TikZ)

Петля с бриллиантом (TikZ)

Как сделать петлю от западного угла ромба до восточного угла ромба, как на рисунке?

Фигура

введите описание изображения здесь

Код

       \documentclass[border=5mm]{standalone}
       \usepackage{tikz}
       \usetikzlibrary{shapes.geometric}
       \usepackage{amssymb}
       \begin{document}

        \begin{tikzpicture}[->, >=stealth, auto, semithick,
                 node distance=3cm,shorten >=2pt,shorten <=2pt,
                 mynode/.style={fill=white,draw,
                 diamond,thick,inner sep=5pt}]
        \node[mynode] (A) {$1$};
        \node[mynode] (B)[right of=A]  {$2$};
        \node[mynode] (C)[right of=B]  {$3$};
        \node[mynode] (D)[right of=C]  {$4$};

        \path[black](A.east) edge[bend left] node{S} (B.west)
                    (B.west) edge[bend left] node{U} (A.east)
                    (B.east) edge node{E} (C.west) 
                    (C.east) edge node{S} (D.west)
                    (B) edge[loop above] node{P} (B)
                    (B) edge[loop below] node{C} (B)
                    (C) edge[loop above] node{N} (C);
       \end{tikzpicture}
       \end{document}

Выход

введите описание изображения здесь

решение1

Вот один из методов, использующий три отдельных \draws.

выход

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\usepackage{amssymb}
\begin{document}

\begin{tikzpicture}[->, >=stealth, auto, semithick,
          node distance=3cm,shorten >=2pt,shorten <=2pt,
          mynode/.style={fill=white,draw,
          diamond,thick,inner sep=5pt}]
 \node[mynode] (A) {$1$};
 \node[mynode] (B)[right of=A]  {$2$};
 \node[mynode] (C)[right of=B]  {$3$};
 \node[mynode] (D)[right of=C]  {$4$};

 \path[black](A.east) edge[bend left] node{S} (B.west)
             (B.west) edge[bend left] node{U} (A.east)
             (B.east) edge node{E} (C.west) 
             (C.east) edge node{S} (D.west);
 \draw       (B.west) to[out=110,in=70,looseness=3] node{P} (B.east);
 \draw       (B.west) to[out=-110,in=-70,looseness=3] node[swap]{C} (B.east);
 \draw       (C.west) to[out=110,in=70,looseness=3] node{N} (C.east);
\end{tikzpicture}
\end{document}

решение2

Альтернатива с использованием библиотек arrows.meta, bendingи quotesи arcвместо loop:

\documentclass[tikz, border=5mm]{standalone}
\usetikzlibrary{arrows.meta, bending, quotes, shapes.geometric}

\begin{document}
    \begin{tikzpicture}[-{Stealth[bend]}, auto, semithick,
     node distance=3cm,
     shorten >=2pt, shorten <=2pt,
     mynode/.style={diamond,draw, thick, minimum size=8mm, inner sep=0pt}
                       ]
\node[mynode] (A) {$1$};
\node[mynode] (B)[right of=A]  {$2$};
\node[mynode] (C)[right of=B]  {$3$};
\node[mynode] (D)[right of=C]  {$4$};

\path[black](A.east) edge[bend left, "S"]   (B.west)
            (B.west) edge[bend left, "U"]   (A.east)
            (B.east) edge["E"]              (C.west)
            (C.east) edge["S"]              (D.west);
\draw       ([yshift= 2pt] B.west) arc (235:-55:0.7) node[midway,below] {P};
\draw       ([yshift=-2pt] B.west) arc (-235:55:0.7) node[midway,above] {C};
\draw       (C.west) arc (235:-55:0.7) node[midway,below] {N};
    \end{tikzpicture}
\end{document}

введите описание изображения здесь

При определении arcрадиуса end angleучитывались следующие соотношения:

введите описание изображения здесь

arcс Pи Cсмещены по вертикали соответственно на 2 точки, чтобы они не перекрывались с линиями сгиба между узлами 1 и 2.

Связанный контент