Automaten malen mit pgf/tikz

Alles, was sonst nirgendwo reinpasst

Automaten malen mit pgf/tikz

Beitragvon Martin » 13.06.08 14:48

Hallo zusammen,

es haben ja schon ein paar Leute angedeutet, dass sie mit tikz Automaten malen.

Ich habe mich nun auch mal damit befasst, komme an einer Stelle aber nicht weiter.

Code: Alles auswählen
\begin{tikzpicture}[shorten >=1pt,node distance=4cm,auto,initial text=]
   \node[state,initial]            (w_0)                   {$w_0$};
   \node[state,style={rectangle}]  (w_1) [right =of w_0]   {$w_1$};
   \node[state]                    (w_2) [below =of w_0]   {$w_2$};
   \node[state,style={rectangle}]  (w_3) [below =of w_1]   {$w_3$};
   \path[->] (w_0) edge[above=10pt]              node        {$d$} (w_1)
                edge              node[swap,near start]{$a$} (w_3)
           (w_1) edge              node        {$d$} (w_0)
                edge              node[near start]{$a$} (w_2)
           (w_2) edge              node        {$b$} (w_0)
                edge              node        {$c$} (w_3)
           (w_3) edge              node        {$b$} (w_1)
                edge              node        {$c$} (w_2);
\end{tikzpicture}


Das ganze sieht dann so aus:
Bild

Wie man unschwer erkennen kann, liege dann z.T. zwei Kanten übereinander. Wie kann ich das möglichst elegant beheben?
Martin
10100111001
 
Beiträge: 1932
Registriert: 09.09.05 17:47
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: BWL

Beitragvon fw » 13.06.08 14:50

Google mal nach "EdgeStyle" und "bend", damit kannst du "gebogene" Kanten machen... (z.B. hier)
Zuletzt geändert von fw am 13.06.08 14:52, insgesamt 1-mal geändert.
Benutzeravatar
fw
 
Beiträge: 1356
Registriert: 17.05.06 19:37
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: Mathe

Beitragvon Martin » 13.06.08 14:52

fw hat geschrieben:Google mal nach "EdgeStyle" und "bend", damit kannst du "gebogene" Kanten machen...


Ja, das hatte ich auch schon, aber das wäre nur ne Notlösung. Am liebsten hätte ich einfach zwei gerade Kanten, die nur ein paar mm auseinander liegen.
Martin
10100111001
 
Beiträge: 1932
Registriert: 09.09.05 17:47
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: BWL

Beitragvon kb » 13.06.08 15:23

Ich find die Seite recht informativ: http://www.fauskes.net/code/dot2tex/documentation/

Es gibt wohl auch eine "automata" library, allerdings hättest du dann wieder kurven (Bild gibts auch im o.g. Link)...
"Auch wenn fünfzig Millionen Menschen etwas Dummes sagen, bleibt es trotzdem eine Dummheit."
"It doesn't matter if you win or lose, it's whether or not you beat the spread."
Benutzeravatar
kb
 
Beiträge: 1237
Registriert: 06.04.06 21:20
Wohnort: Aachen / Köln

Beitragvon cracki » 13.06.08 21:36

http://www.tug.org/pracjourn/2007-1/mertz/mertz.pdf

nach dem dokument bin ich gegangen. da wird alles eingefuehrt.

das ein automat zum shuffleprodukt, mit TikZ:

Code: Alles auswählen
\begin{tikzpicture}[->,auto,node distance=3cm,semithick]
   \node[state,initial,accepting] (a1)               {$a_1$};
   \node[state]                   (a2) [right of=a1] {$a_2$};
   \node[state]                   (a3) [right of=a2] {$a_3$};
   
   \node[state,initial]   (q11) [below of=a1]  {$q_{11}$};
   \node[state]           (q21) [right of=q11] {$q_{21}$};
   \node[state]           (q31) [right of=q21] {$q_{31}$};
   \node[state,accepting] (q12) [below of=q11] {$q_{12}$};
   \node[state]           (q22) [right of=q12] {$q_{22}$};
   \node[state]           (q32) [right of=q22] {$q_{32}$};

   \node[state,initial]  (b1) [left of=q11] {$b_1$};
   \node[state,accepting](b2) [below of=b1] {$b_2$};
   
   
   \path (q11) edge              node {a} (q21)
         (q21) edge              node {a} (q31)
         (q31) edge [bend right] node {b} (q11)

         (q12) edge              node {a} (q22)
         (q22) edge              node {a} (q32)
         (q32) edge [bend left]  node {b} (q12)

         (q11) edge [bend left]  node {b} (q12)
         (q12) edge [bend left]  node {b} (q11)

         (q21) edge [bend left]  node {b} (q22)
         (q22) edge [bend left]  node {b} (q21)

         (q31) edge [bend left]  node {b} (q32)
         (q32) edge [bend left]  node {b} (q31);

   \path (a1) edge               node {a} (a2)
         (a2) edge               node {a} (a3)
         (a3) edge [bend right]  node {b} (a1);

   \path (b1) edge [bend left]   node {b} (b2)
         (b2) edge [bend left]   node {b} (b1);

\end{tikzpicture}


was hast du gegen gebogene kanten?
"I suppose if what you said had any merit it would occasion hostility." -- Kenny Tilton
Frische Vorlesungen! -- video.rwth-aachen.de
Benutzeravatar
cracki
 
Beiträge: 537
Registriert: 22.02.08 14:51
Wohnort: Aachen
Studiengang: Informatik (M.Sc.)
Studiert seit: ?
Anwendungsfach: Medizin


Zurück zu Off-Topic