Вопрос

У меня паралич совершенства, когда дело доходит до создания чего-то графического.Если визуальные симметрии не были полностью изучены, мне будет сложнее понять, что происходит.Я также хорошо разбираюсь в визуализации, и мне НРАВИТСЯ упрощать вещи, которые я только что изучил, и рисовать их на бумаге.

Graphviz - хороший инструмент для автоматического рисования, но он мог бы быть лучше.Давайте начнем с примера хорошего графика) скорее конечного автомата).Не обращайте внимания на качество (его можно перерисовать с помощью лучшего инструмента), этот почти идеален, за исключением того, что я бы повернул его против часовой стрелки на 45 градусов, чтобы симметрия была очевидной.Тогда читателю потребуется меньше времени, чтобы понять, насколько состояния q1 и q2 похожи и чем они отличаются.Я утверждаю, что есть единственный наилучший способ представить эту диаграмму, учитывая, что рядом с ней нет других графических элементов.

http://gallery.hd.org/_exhibits/maths/math-finite-state-machine-DHD.gif
(источник: gallery.hd.org)

Теперь давайте посмотрим на менее совершенное изображение:

http://linux.softpedia.com/screenshots/Graphviz_1.png
(источник: softpedia.com)

Это похоже на то, что мог бы сгенерировать graphviz.Да, края гладкие, но GAAAAWWWD это ненужная путаница!Это похоже на ментальную карту, а не на законченную диаграмму, готовую к употреблению.Я верю, что человеческие глаза ЖАЖДУТ (не меньше) симметрии.Да, иерархия и так далее.это также важные факторы.

Я удивлен, что нет доступных алгоритмов получше.Некоторые люди вообще не умеют видеть;они могут постигать абстрактные понятия, читая символы.Только не я!

Итак, в чем заключается мой вопрос?Итак, есть ли лучшее бесплатное программное обеспечение для рисования графиков от малого до среднего размера?Возможно

Спасибо!

Дайте мне знать, как я могу улучшить этот пост.

P.S.Мне потребовалось 10 минут, чтобы нарисовать достаточно похожий клон в dia.Это все еще не идеально, но это было удобно сделать, потому что все привязывается к сетке (и я пропустил несколько мелких деталей, но мне не хочется загружать их заново).LR_0 нуждается в "Start --->", идущем сверху, чтобы позволить пользователю быстрее понять начальное состояние.

Finate State Machine

Это было полезно?

Решение

После нескольких попыток нарисовать свой график и неудачной попытки получить макет, который вы считаете "лучшим", вы задали вопрос здесь: существует ли "[b] etter бесплатное программное обеспечение [для] рисования графиков от малого до среднего размера". Единственный критерий, который вы указали для оценки алгоритмов компоновки, - это то, насколько близко они подходят к "наилучшему способу представления этой диаграммы". "Наилучший", конечно, оставлен на ваше усмотрение.

Это более или менее то же самое, что пытаться решить проблему, используя данный язык программирования, потерпеть неудачу, а затем запросить лучший язык программирования.

В основе алгоритмов построения графиков лежат процедуры оптимизации, которые генерируют затем оценочные решения ("решение" здесь относится к координатам для каждого узла, которые вместе составляют макет).Эти решения оцениваются в соответствии с минимизацией одного критерия или серии ранжированных критериев, т.е. минимизацией одного или нескольких атрибутов графика, например, общего числа пересекающихся ребер, или суммы расстояний между узлами (или комбинации того и другого, или некоторой взвешенной комбинации этих двух), или близости к симметричной конфигурации.Graphviz состоит из шести различных алгоритмов компоновки (dot neato, fdp, sfdp, twopi и circo).Из них, похоже, вы использовали только точку;однако twopi и circo могли бы быть лучшими вариантами, учитывая их строгие ограничения симметрии, которые, по-видимому, соответствуют вашему собственному представлению о правильно построенном графике.

Во-вторых, текст вашего вопроса направлен на "графики" и рисование графиков, После прочтения вашего полного описания я не думаю, что ваш вопрос имеет какое-либо отношение ни к одной из концепций.

Помимо общих алгоритмов построения графиков (таких как graphviz), существует ряд алгоритмов компоновки, специфичных для конкретной предметной области, например, диаграммы Хассе (для представления частично упорядоченных множеств в теории порядка), графики Барабаши-Альберта (сети без масштабирования) и Эрдоса-Реньи (случайные графики).Каждый из этих алгоритмов создает макет графика на основе критериев и ограничений, предоставляемых доменом - это должно указывать вам на то, что не существует единого "наилучшего" макета во всех доменах.Хотя вы использовали термин "график" в своем вопросе, ваше описание указывает, что ваша проблема связана с рисованием конечных автоматов - весьма своеобразного типа графиков.Общие алгоритмы построения графиков часто плохо справляются с построением специализированных графиков такого рода, потому что алгоритм ничего не знает о предметной области.На самом деле, я не знаю ни о каком алгоритме компоновки для диаграмм состояний - точно так же, как его нет для блок-схем (не то же самое, но похожее).С точки зрения рабочего процесса вы можете нарисовать график в graphviz, а затем импортировать его в Omnigraffle для точной настройки - в Omnigraffle у вас будет детальный контроль над размещением узлов и ребер.

Другие советы

Есть несколько вариантов, о которых я знаю:

  • Prefuse - У них есть более старая версия Java.Последняя версия доступна на Flash и имеет несколько приятных макетов.Это называется Предварительная Вспышка.Тот Самый демонстрационная страница иллюстрирует некоторые из его возможностей компоновки.
  • JUNG включает в себя ряд опций компоновки, а также мощные функции анализа графиков.Вот несколько примеров здесь.
  • Networkx также включает в себя множество возможностей верстки.Некоторые из них перечислены ниже здесь.

Некоторые программы позволяют пользователям настраивать алгоритмы компоновки в режиме реального времени, перемещая узлы с помощью мыши.Этот подход может очень помочь вам при работе с большими графиками.

Я в основном знаю Гефи (отказ от ответственности:Я разработчик).

ТикЗ генерирует красивые макеты графиков.Вы можете использовать макет вручную, который позволяет указать минимум подсказок, или запросить автоматический макет.Значения по умолчанию хороши, и существуют крючки, позволяющие довести их до совершенства.

При полуручном макете вам не придется описывать каждую деталь, поскольку вы можете

  • объявляйте узлы как находящиеся «над», «ниже справа» и т. д.относительно других узлов.
  • поместите узлы на растр, введя их в виде матрицы:очень удобно, если вы хотите оставить некоторые позиции пустыми.
  • легко указать, в каком направлении края должны входить, выходить, сгибаться или поворачивать за углы

Для автоматической раскладки TikZ's graphdrawing в библиотеке есть некоторые довольно хитрые алгоритмы.

Вот пример ручного макета и кода TeX, использованного для его получения:

example graph

\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}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top