制作一个 TikZ 自动机边缘传递到自动机“外部”

制作一个 TikZ 自动机边缘传递到自动机“外部”

我正在尝试使用 TikZ 绘制摩尔机。这是我目前所得到的:

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{arrows,automata,positioning}

\begin{document}
\begin{tikzpicture}[>=latex',shorten >=1pt,node distance=3cm,on grid,auto]
  \node[state,initial] (q0-e) {$q_0/\epsilon$};
  \node[state] (q0-1) [below right=of q0-e] {$q_0'/1$};
  \node[state] (q1-0) [above right=of q0-1] {$q_1/0$};
  \node[state] (q2-1) [below right=of q1-0] {$q_2/1$};
  \node[state,accepting] (q3-0) [below left=of q0-1] {$q_3/0$};
  \node[state,accepting] (q3-1) [below right=of q0-1] {$q_3'/1$};
  \path[->] (q0-e) edge node {a} (q1-0);
  \path[->] (q0-e) edge node {b} (q3-0);
  \path[->] (q0-1) edge node {a} (q1-0);
  \path[->] (q0-1) edge [bend right] node {b} (q3-0);
  \path[->] (q1-0) edge [bend left=90,looseness=2.5] node {a} (q3-1);
  \path[->] (q1-0) edge node {b} (q2-1);
  \path[->] (q2-1) edge node {a} (q0-1);
  \path[->] (q2-1) edge node {b} (q3-1);
  \path[->] (q3-0) edge node {a} (q3-1);
  \path[->] (q3-0) edge [bend right] node {b} (q0-1);
  \path[->] (q3-1) edge [loop below] node {a} (q3-1);
  \path[->] (q3-1) edge node {b} (q0-1);
\end{tikzpicture}
\end{document}

它会生成下面的自动机:

摩尔机

但我希望从 $q_1/0$ 到 $q_3'/1$ 的边能够“超出”自动机的范围,如下图红线所示:

摩尔机带有指示所需绘图的线

有人能告诉我如何实现吗?谢谢。

答案1

为了达到该效果,需要额外的点。这里使用贝塞尔曲线,其中两个额外的点位于点 (q1-0) 和 (q3-1) 右侧 4 厘米处,然后(p1) .. controls (p2) and (p3) .. (p4);应用命令。还calc使用 tikzlibrary 来计算坐标。

在此处输入图片描述

代码

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{automata,arrows,trees,positioning,shapes,calc}
\begin{document}

\begin{tikzpicture}[>=latex',shorten >=1pt,node distance=3cm,on grid,auto]
  \node[state,initial] (q0-e) {$q_0/\epsilon$};
  \node[state] (q0-1) [below right=of q0-e] {$q_0'/1$};
  \node[state] (q1-0) [above right=of q0-1] {$q_1/0$};
  \node[state] (q2-1) [below right=of q1-0] {$q_2/1$};
  \node[state,accepting] (q3-0) [below left=of q0-1] {$q_3/0$};
  \node[state,accepting] (q3-1) [below right=of q0-1] {$q_3'/1$};
  \path[->] (q0-e) edge node {a} (q1-0);
  \path[->] (q0-e) edge node {b} (q3-0);
  \path[->] (q0-1) edge node {a} (q1-0);
  \path[->] (q0-1) edge [bend right] node {b} (q3-0);
  \path[->] (q1-0) edge node {a} (q3-1);
  \path[->] (q1-0) edge node {b} (q2-1);
  \path[->] (q2-1) edge node {a} (q0-1);
  \path[->] (q2-1) edge node {b} (q3-1);
  \path[->] (q3-0) edge node {a} (q3-1);
  \path[->] (q3-0) edge [bend right] node {b} (q0-1);
  \path[->] (q3-1) edge [loop below] node {a} (q3-1);
  \path[->] (q3-1) edge node {b} (q0-1);
  \draw [->,thick,red] (q1-0) ..  controls  ($(q1-0)+(4cm,0)$) and
  ($(q3-1)+(4cm,0)$) ..  (q3-1);
\end{tikzpicture}

\end{document}

相关内容