Domanda

Ho perfezione paralisi, quando si tratta di produrre qualcosa di grafica. Se simmetrie del visivo non sono state pienamente esplorate, ho più difficoltà a comprendere ciò che sta accadendo. Io sono uno studente molto visivo così, e mi piace per semplificare le cose che ho appena imparato e disegnare su carta.

Graphviz è un buon strumento per disegnare cosa automaticamente, ma potrebbe essere migliore. Iniziamo con un esempio di un buon grafico) una macchina a stati piuttosto). Non importa la qualità (può essere ridisegnato con uno strumento più) questo è quasi perfetto, tranne che avrei ruotare in senso antiorario di 45 gradi per effettuare la simmetria apparente. Essa dovrebbe quindi prendere il lettore meno tempo per capire come gli stati Q1 e Q2 sono simili e in che modo in cui differiscono. Sostengo che v'è un unico modo migliore per rappresentare quel diagramma, dato che non esistono altri pezzi di grafica accanto ad esso.

http://gallery.hd.org/_exhibits/maths/math-finite-state-machine-DHD.gif
(fonte: gallery.hd.org )

Ora diamo un'occhiata ad un meno che perfetto rappresentazione:

http://linux.softpedia.com/screenshots/Graphviz_1.png
(fonte: softpedia.com )

Questo appare come qualcosa di un graphviz genererebbe. Sì, i bordi sono lisci ma GAAAAWWWD questo è inutile confusione! Si presenta come una mappa mentale, non un diagramma finito pronto per il consumo. Credo che occhi umani CRAVE (non meno) di simmetria. Sì, la gerarchia, ecc, sono anche fattori importanti.

Sono sorpreso che non ci sono migliori algoritmi disponibili. Alcune persone non sono studenti visiva a tutti; essi possono afferrare concetti astratti con la lettura dei simboli. Non io!

Quindi, qual è la mia domanda? Beh, c'è un software più libero disponibile per i grafici di piccole e medie dimensioni? Forse

Grazie!

Fatemi sapere come posso migliorare questo post.

P.S. Ho preso 10 minuti per tirare fuori un clone di abbastanza simile in diametro. Non è ancora perfetto, ma era conveniente fare perché tutto si aggancia alla rete (e ho perso un paio di piccoli dettagli, ma non si sentono come ri-upload). Il LR_0 ha bisogno di un "Start --->" proveniente dall'alto per permettere all'utente di cogliere lo stato di iniziare presto.

Finate State Machine

È stato utile?

Soluzione

Dopo vari tentativi di disegnare il grafico e non riuscendo ad ottenere un layout che si ritengono "migliore", si pose la domanda qui: è lì "[b] software libero Etter [per] il disegno piccole a medio-grafici. " l'unico criterio che hai dato per valutare gli algoritmi di layout è quanto strettamente arrivano al '[s] modo Ingle meglio per rappresentare quello schema.' "Best", naturalmente, a sinistra per voi a decidere.

Questo è più o meno lo stesso come il tentativo di risolvere un problema con un determinato linguaggio di programmazione, in mancanza, e quindi di richiedere un miglior linguaggio di programmazione.

Al centro di algoritmi di disegno grafico sono routine di ottimizzazione che generano quindi soluzioni di valutazione ( 'soluzione' qui si riferisce alle coordinate di ciascun nodo che insieme comprendono un layout). Tali soluzioni sono valutati secondo minimizzazione di un unico criterio o una serie di criteri ordinati - cioè, la minimizzazione di una o più attributi del grafico - per esempio, il numero totale di spigoli che attraversano, o la somma delle distanze tra i nodi (o combinazione di entrambi, o una combinazione ponderata di questi due), o la vicinanza di una configurazione simmetrica. Graphviz è composto da sei differenti algoritmi di layout (dot neato, FDP, SFDP, twopi e circo). Di questi, vi appare dot usato solo; tuttavia, twopi e circo avrebbe potuto essere opzioni migliori dato i loro rigidi vincoli di simmetria che sembrano corrispondere la propria idea di un grafico disegnato in modo corretto.

In secondo luogo, il testo della tua domanda è rivolta a "grafici" e grafico-disegno, dopo aver letto la tua descrizione completa, non credo che la tua domanda non ha nulla a che fare né con il concetto.

Oltre gli algoritmi di disegno grafico generale (come graphviz), ci sono una serie di algoritmi di layout dominio-specifici, per esempio, i diagrammi di Hasse (per rappresentare relazione d'ordine in order theory), Barabasi-Albert grafici (reti scale-free ), e Erdos-Renyi (grafi random). Ognuno di questi algoritmi produce un layout grafico basato su criteri e vincoli forniti dal dominio - questo dovrebbe indicare che non c'è un singolo layout "migliore" in tutti i domini. Anche se si è utilizzato il termine "grafico" nella sua interrogazione, la tua descrizione indica che il problema si riferisce al disegno macchine a stati - un tipo altamente idiosincratico di grafico. Algoritmi di disegno grafico generale sono spesso poveri a disegnare grafici specializzati di questo genere perché l'algoritmo non sa nulla di dominio. In realtà, io non sono a conoscenza di qualsiasi algoritmo di layout per diagrammi di stato - proprio come non ce n'è uno per diagrammi di flusso (non è la stessa, ma simile). Flusso di lavoro-saggio, si potrebbe disegnare il grafico in graphviz quindi importarlo per OmniGraffle per la messa a punto - in OmniGraffle, avrete il controllo a grana fine nel corso degli nodo e del collocamento

.

Altri suggerimenti

Ci sono una serie di opzioni che conosco:

  • Prefuse - Hanno un vecchio Java versione . La nuova versione è in Flash e ha alcune belle layout. La sua chiamata Prefuse Flare . Il demo pagina illustra alcune delle sue funzionalità di layout.
  • JUNG comprende una serie di opzioni di layout, così come le sue potenti funzioni di analisi del grafico. Ci sono alcuni esempi qui .
  • NetworkX comprende anche numerose funzionalità di layout. Alcuni di essi sono elencati qui .

Alcuni software permettono agli utenti di tweaking algoritmi di layout in tempo reale, a patto che si muove nodi con il mouse. Questo approccio può aiutare notevolmente per i grafici più grandi.

Io per lo più so Gephi (Disclamer: Sono un dev)

.

TikZ genera belle layout grafico . È possibile utilizzare un layout manuale che permette di specificare il minimo di suggerimenti, oppure si può chiedere per il layout automatico. Le impostazioni predefinite sono buone, e ganci esistono per modificare alla perfezione.

Con il layout semi-manuale non devi dichiarare ogni dettaglio, perché è possibile

  • dichiarare nodi come 'sopra di', 'in basso a destra di', ecc rispetto ad altri nodi.
  • posizionare i nodi su un raster inserendoli come matrice:. Molto conveniente se si vuole lasciare alcune posizioni vuote
  • facilmente specificare in quale direzione bordi dovrebbe entrare, uscire, piegare o prendere angoli

Per layout automatico, biblioteca graphdrawing di TikZ ha qualche abbastanza algoritmi chiazza di petrolio .

Ecco un esempio di layout manuale e il codice TeX utilizzato per ottenerla:

esempio di grafico

\usepackage{pgf}
\usepackage{tikz}
\usetikzlibrary{arrows,automata}
\usepackage[latin1]{inputenc}
\begin{document}
\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=2.8cm,
                    semithick]
  \tikzstyle{every state}=[fill=red,draw=none,text=white]

  \node[initial,state] (A)                    {$q_a$};
  \node[state]         (B) [above right of=A] {$q_b$};
  \node[state]         (D) [below right of=A] {$q_d$};
  \node[state]         (C) [below right of=B] {$q_c$};
  \node[state]         (E) [below of=D]       {$q_e$};

  \path (A) edge              node {0,1,L} (B)
            edge              node {1,1,R} (C)
        (B) edge [loop above] node {1,1,L} (B)
            edge              node {0,1,L} (C)
        (C) edge              node {0,1,L} (D)
            edge [bend left]  node {1,0,R} (E)
        (D) edge [loop below] node {1,1,R} (D)
            edge              node {0,1,R} (A)
        (E) edge [bend left]  node {1,0,R} (A);
\end{tikzpicture}
\end{document}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top