Есть ли какая-либо документация (полный псевдокод?) в алгоритме из точки в библиотеке Graphviz?
Я нашел только некоторую частичную документацию псевдокода.
Есть ли какая-либо документация (полный псевдокод?) в алгоритме из точки в библиотеке Graphviz?
Я нашел только некоторую частичную документацию псевдокода.
Вот несколько ссылок для вас. Самым полным (если не считать самого исходного кода Graphviz) является, вероятно, № 2 - статья "Техника рисования ориентированных графиков", написанная несколькими участниками программы Graphviz.
В Рисование графиков с точкой алгоритм размещения точек описывается следующим образом:
точка рисует графики в четыре основных этапа. Знание этого поможет вам понять, какие макеты делает точка и как вы можете их контролировать. Процедура размещения, используемая точкой, основана на ацикличности графа. Таким образом, первый шаг состоит в том, чтобы разорвать любые циклы, которые происходят во входном графе, путем изменения внутреннего направления некоторых циклических ребер. Следующий шаг назначает узлы для дискретных рангов или уровней. На рисунке сверху вниз ранги определяют координаты Y. Ребра, охватывающие более одного ранга, разбиваются на цепочки "виртуальных" узлов и ребер единичной длины. Третий шаг упорядочивает узлы в рядах, чтобы избежать пересечений. Четвертый шаг устанавливает X координат узлов, чтобы ребра были короткими, а последний шаг направляет сплайны ребер. Это тот же общий подход, что и в большинстве программ для построения графиков, основанных на работах Warfield [War77], Carpano [Car80] и Sugiyama [STT81]. Мы отсылаем читателя к [GKNV93] для подробного объяснения алгоритмов точек
В этом параграфе упоминаются следующие документы:
[Car80] М. Карпано. Автоматическое отображение иерархических графиков для автоматизированного анализа решений. IEEE Transactions по программной инженерии, SE-12 (4): 538–546, апрель 1980 г. (очевидно, для покупки здесь.)
[GKNV93] Эмден Р. Ганснер, Элефтериос Кутсофиос, Стивен С. Норт и Кием-Фонг Во. Техника рисования ориентированных графиков. IEEE Trans. Sofware Eng., 19 (3): 214–230, май 1993 г. (доступно здесь на сайте Graphviz.org.)
[STT81] К. Сугияма, С. Тагава и М. Тода. Методы визуального понимания структур иерархических систем. Операции IEEE по системам, человеку и кибернетике, SMC-11 (2): 109–125, февраль 1981 г. (очевидно, для покупки здесь.)
[War77] Джон Уорфилд. Пересечение Теории и Отображение Иерархии. Операции IEEE по системам, человеку и кибернетике, SMC-7 (7): 505–523, июль 1977 г. (очевидно, для покупки здесь.)
Точечный алгоритм подробно описан в статье "Методика рисования ориентированных графов", опубликованной в журнале IEEE Transactions по разработке программного обеспечения в 1993 году (и доступной бесплатно на сайте Graphviz.org). Это источник "[GKNV93]", указанный выше.
Резюме, для чего это стоит, это:
Опишем четырехпроходный алгоритм рисования ориентированных графов. Первый проход находит оптимальное присвоение ранга с использованием сетевого симплексного алгоритма. Второй проход устанавливает порядок вершин в рядах с помощью итеративной эвристики, включающей новую весовую функцию и локальные транспозиции для уменьшения пересечений. Третий проход находит оптимальные координаты для узлов путем построения и ранжирования вспомогательного графа. Четвертый проход делает сплайны, чтобы рисовать края. Алгоритм делает хорошие рисунки и работает быстро.
"Использование Graphviz в качестве библиотеки" предоставляет сводку по каждому алгоритму механизма компоновки в разделе 3.1. Вот часть описания точки:
Точечный алгоритм создает ранжированный макет графа, соблюдая направления ребер, если это возможно. Это особенно подходит для отображения иерархий или ориентированных ациклических графов. Основная схема компоновки приписана Сугияме и др. [STT81] Специальный алгоритм, используемый точкой, следует за шагами, описанными Ганснером и др. [GKNV93]
Шаги в точечной разметке: 1) инициализация 2) ранг 3) минкросс 4) позиция 5) тот же порт 6) сплайны 7) componentEdges
После инициализации алгоритм присваивает каждому узлу дискретный ранг (rank), используя целочисленную программу, чтобы минимизировать сумму (дискретных) длин ребер. Следующий шаг (mincross) переставляет узлы в рядах, чтобы уменьшить пересечения краев. Затем следует присвоение (положение) фактических координат узлам, используя другую целочисленную программу для сжатия графика и выпрямления ребер. На этом этапе все узлы будут иметь положение, установленное в атрибуте координат. Кроме того, установлен атрибут bb ограничительной рамки всех кластеров.
Ссылка "[GKNV93]" относится к "Методике рисования ориентированных графиков", как указано выше.
Ссылка "[STT81]" - "Методы визуального понимания структур иерархических систем", как указано выше.
Указатель документации Graphviz, содержащий ссылки на подробную документацию и дополнительные справочные материалы.
Страница "Теория" Graphviz, которая содержит ссылки на еще более справочные материалы.
исходный код для dot
теперь находится на GitLab, см. dotgen и dotgen2. необработанный исходный код для dot
, который доступен на GitHub.
Некоторые связанные обсуждения в d3.js группе Google.