암호

암호

아래 그림(예쁘지 않은)을 다시 만들려고 합니다.

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

게시물 하단의 코드를 사용하여 다음 솔루션을 생각해낼 수 있었습니다.

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

이 솔루션에 대해 몇 가지 불만이 있습니다. 해결이 가능하기를 바랍니다.

  • 세 개의 대각선 화살표(A ->- C, B ->- E 및 D ->- F의 경로가 평행할 수 있나요?
  • 다음 질문의 코드를 사용했습니다.TikZ: 선 중앙에 화살표를 그리는 방법은 무엇입니까?가운데에 화살표를 만듭니다. 그러나 이것은 매우 복잡해 보입니다. 더 쉬운 해결책이 있습니까?
  • 마찬가지로 각 노드를 정의하는 것이 불필요해 보였지만 일종의 루프를 사용하여 이 작업을 수행할 수 있습니까?
  • 이미지를 다시 만드는 방법에 대한 다른 솔루션도 환영합니다.

암호

\documentclass[tikz]{standalone}
\usetikzlibrary{decorations.pathreplacing,
decorations.markings,
positioning}
\tikzset{
  % style to apply some styles to each segment of a path
  on each segment/.style={
    decorate,
    decoration={
      show path construction,
      moveto code={},
      lineto code={
        \path [#1]
        (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast);
      },
      curveto code={
        \path [#1] (\tikzinputsegmentfirst)
        .. controls
        (\tikzinputsegmentsupporta) and (\tikzinputsegmentsupportb)
        ..
        (\tikzinputsegmentlast);
      },
      closepath code={
        \path [#1]
        (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast);
      },
    },
  },
  % style to add an arrow in the middle of a path
  mid arrow/.style={postaction={decorate,decoration={
        markings,
        mark=at position .5 with {\arrow[#1]{stealth}}
      }}},
}

\usepackage[utf8]{inputenc}

\begin{document}

\begin{tikzpicture}[
    every node/.style={draw,circle}]

\node (A) at (0,0) {$A$};
\node[label=above:{$\$\,1$},above right= of A] (B) {$B$};
\node[label=below:{$\$\,2$},below right= of A] (C) {$C$};
\node[label=above:{$\$\,2$},right= of B] (D) {$D$};
\node[label=below:{$\$\,1$},right= of C] (E) {$E$};
\node[above right= of E] (F) {$F$};

\path [draw,postaction={on each segment={mid arrow}}]
(A) -- (B)%
(A) -- (C)%
(B) -- (D)%
(B) -- (E)%
(C) -- (E)%
(D) -- (F)%
(E) -- (F)%
;

\end{tikzpicture}

\end{document}

답변1

정육각형으로 그려주세요.

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

\documentclass[tikz]{standalone}
\usetikzlibrary{decorations.pathreplacing,decorations.markings,positioning}
\tikzset{
 mid arrow/.style={draw, postaction={decorate},
 decoration={
    markings, mark=at position 0.5 with {\arrow{stealth}}}},
 every node/.style={draw,circle}}

\begin{document}
\begin{tikzpicture}
\node (F) at (0:2) {$F$};
\node (D) at (60:2) {$D$};
\node (B) at (120:2) {$B$};
\node (A) at (180:2) {$A$};
\node (C) at (240:2) {$C$};
\node (E) at (300:2) {$E$};

\path [mid arrow] (A) -- (B);
\path [mid arrow] (A) -- (C);%
\path [mid arrow] (B) -- (D);%
\path [mid arrow] (B) -- (E);%
\path [mid arrow] (C) -- (E);%
\path [mid arrow] (D) -- (F);%
\path [mid arrow] (E) -- (F);
\end{tikzpicture}
\end{document}

답변2

이와 같이?

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

정다각형(귀하의 경우 육각형)은 반대쪽 변이 평행합니다.

\documentclass[tikz, margin=3mm]{standalone}
\usetikzlibrary{decorations.markings,
                positioning,
                shapes.geometric}

\begin{document}

\begin{tikzpicture}[
     node distance = 12mm and 12mm,
     vertex/.style = {circle, draw, fill=white, minimum size=1em, inner sep=1pt}, 
        decoration = {markings, mark=at position .5 with {\arrow{stealth}}},
 every edge/.style = {draw, postaction={decorate}},
every label/.style = {inner sep=1pt, font=\footnotesize}
                    ]
\node (s) [regular polygon, 
           regular polygon sides=6,
           minimum size=44mm] {}; % coordinates for nodes
\foreach \i/\j [count=\k] in {D/\$\,2,B/\$\,1,A/,C/\$\,2,E/\$\,1,F/} % loop for nodes
\node (v\k) [vertex, label={\k*60}:\j] at (s.corner \k) {$\i$};
\draw  (v1) edge (v2);
\draw  (v2) edge (v3);
\draw  (v3) edge (v4);
\draw  (v4) edge (v5);
\draw  (v5) edge (v6);
\draw  (v6) edge (v1);
%
\draw  (v2) edge (v5);
    \end{tikzpicture}
\end{document}

편집하다: 루프를 사용하여 그릴 수 있는 다각형 주위의 가장자리:

\foreach \i in {0,...,5}
{
\pgfmathsetmacro{\j}{int(Mod(\i,6)+1)}
\pgfmathsetmacro{\k}{int(Mod(\i+1,6)+1)}
\draw  (v\j)  edge (v\k);
}

귀하의 경우 다각형은 육각형이기 때문에 코드는 이전처럼 훨씬 짧지 않습니다 :-).

관련 정보