LINUX.ORG.RU

автоматическая генерация картинок из кружочков и палочек (визуализация графа)?

 , ,


2

3

Возникла необходимость автоматически отрисовывать граф вот в таком виде http://a-iv.ru/trash/Z4.png

У кружочков (узлов) известны координаты, палочки (связи) тоже известны - подскажите пожалуйста какую нить годную несложную утилиту/библиотеку? Выходной формат не очень важен - png, pdf, svg и пр.

Можно наверное в LaTeX, но сходу вышло как то муторно;-(

★★★★★
  1. graphviz.org рисует графы в разных выходных форматах

  2. самодельный скрипт на python,lua,… ,генерящий исходник картинки в TeXe

  3. самодельная прога на C,C++ с граф.либой (cairo,…)

anonymous
()
Ответ на: комментарий от anonymous

Спасибо кэп, про gnuplot забыли:-)

Все это требует вкуривания выходных форматов. Графвиз (насколько я его юзал) все таки рисует не такие графы, хотя м.б. его и можно настроить на требуемый вид изображения.

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

AntonI ★★★★★
() автор топика

graphviz. Он умеет рисовать графы с исвестными координатами вершин, формат там простой текстовый, все упомянутые выходные форматы он умеет.

slovazap ★★★★★
()

очевидно же тебе нужен метапрог ( metaprog). Он такое прям из коробки сумеет, но пока есть только прототип, на котором можно делать такие сложные вещи как будильник и квадратное уравнение, так что подключайся к развитию проекта или донать на развитие. Все будет.

anonymous
()

вместо LaTeX + что-то можно взять groff + pic + набор макросов MOM

обучалка по pic от Eric S. Raymond (c) Art Of Unix Programming, fetchmail

мануалы по troff вообще

MOM: статья в linuxgazette, офф.сайт с примерами (см. PDF с примерами вёрстки и их исходники).

groff and mom

книга unix text processing про groff с макросами.

важно: нормальная поддержка unicode, utf-8 и русского есть не во всех версиях troff. точно есть в groff в транке с 1.18 ЕМНИП, версии, а также в heirloom.sf.net из OpenSolaris; troff из plan9; neatroff.

в общем, как правило groff +pic +tbl +eqn + … + mom набор макросов вполне себе заменяет LaTeX.

дистрибутив компактнее и проще, программируемости больше (см. примеры от esr), выходных форматов тоже довольно много (ps, pdf, html через grohtml aka groff -Thtml в транке).

если уникод и кирилические шрифты и кодировки нормально поддерживаются – вполне себе можно использовать troff вместо LaTeX.

опять же, довольно много есть генераторов в Pic формат и т.п. из какого-то другого недоязычка.

pic полностью программируется – см. примеры в обучалке от esr.

anonymous
()
Ответ на: комментарий от anonymous

метапрог и «блочёчки с проводочками» вообще надобно в каком-то pic православном из plan9 от Кернигана преподобного рисовати.

например ещё сеточка

группы с джамперочками

мегафичи

15.3. Escape to Post-Processor

15.4. Executing Shell Commands

графики

диаграмма

кстати, в Plan9 есть /dev/draw у которого тоже есть draw(3)

и вообще, есть plot(6)

это языки для отрисовки векторных картинок.

вполне можно рисовать ими некоторый условный метапрог из utf-8 сразу в PostScript и PDF.

осталось найти какой-то литературный noweb и в него завернуть метапрогнутое.

ну или написать свой noweb на подручных инструментах: смоллтоке или лиспе там.

оригинальный noweb был на icon который не факт что в plan9 запустится. есть noweb.py на пистоне, который работает везде.

кстати, про смоллток. в Pharo есть как OrgMode для чтения/записи литпрогов емакснутых, так и более полноценное литературно-грамотное собственного разлива: Grafoscopio, OpenPonk, Pillar (wiki, smart wiki программируемое, ну и конечно, SWiki).

есть Morphic, для отрисовки композабельной графики слоями. осталось это в какие-то MVC компоненты завернуть. и какие-то многопотоки с парсерами и транспиляторами + графический редактор диаграмм + чанков с многопотоками прикрутить.

алсо, сам формат PDF если его читать вдумчиво, для начала, хотя бы ту же википедию; затем, например описание COS, похожего на этот ваш JSON.

описывает по сути ООБД в файле-контейнере. COS (для хипстеров, почти что JSON) содержит словари с потоками. потоки могут быть сжаты, бинарны, юникодовы, закодированы, цифроподписаны, джаваскрипчены веб-формами, VRML-ены 3D модельки с текстурками.

то есть, по сути, в бинарных потоках может быть что угодно.

anonymous
()
Ответ на: комментарий от AntonI

Но это боль. На третьем куда вкуснее писать. Юникод без костылей везде, f-строки, синтаксис получше. Кстати, можешь погуглить, может то что ты хочешь, можно сделать на Jupyter-е, если есть что-то под него заточеное, то это может быть сильно удобнее, особенно если нужна визуализация и разобраться с тем, что происходит в задаче.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от anonymous

вот PDFasm пример quine на ассемблере который собирает свой собственный текст в pdf (копипастим из PDF-а в текстовый PDFasm.fasm, собираем, запускаем).

видим, что индексы в этом ООБД-контейнере в потоках подбираются таким образом, чтобы можно было ходить по страницам взад-вперёд, не требуя интерпретации других страниц и всего потока в целом (то есть, достаточно только этот один поток декодировать чтобы показать). макросы на ассемблере эти индексы и вычисляют.

внимание, вопрос.

  1. ну что вот мешает туда засунуть например код на смоллтоке, хоть исходный, хоть AST, хоть скомпилированный? и вообще на любом (мета)языке.

  2. метаязыков и языков, как и потоков в формате PDF может быт несколько.

например, в классическом Literate Programming их 1+, как правило 2. то есть: поток документации, текста сразу в разметке LaTeX, метаязык noweb с директивами для переключения потоков и pretty printing, далее «блок кода». в Emacs org-mode babel тоже есть «блоки кода». но есть ещё и «блоки данных». например таблицы или DRAWERS.

ну что мешает сделать 3+ потоков для конкретных CST доки, кода и данных и опционально несколько для метаязыков: (мета)доки (в AST org или markdown заместо CST LaTeX либо troff/groff); (мета)кода в каком-то макросе лиспа, который генерит конкретный чанк кода; (мета)данных в конкретном CSV или COS, JSON и метамоделей этих метаданных в чём-то более высокоуровневом, например STEP EXPRESS??

да ничего. только ленность и инерция мышления. а разгадка одна – безблагодатность.

и затем выбирать дерево конфигураций для множественных линеек продукции и вариантов исполнения с такими вот метаданными.

и какой-то литературно-грамотный noweb.st на смоллтоке с Morphic объектами и структурным редактором диаграмм поверх него.

и метапрог смоллтоковый. графический, но и текстовый. гипертекстовый, векторный и многомерный. как Xanadu православное. и литературно-грамотный.

в виде инфраструктуры города, набора акторов взаимодействующих объектов и компонент (хотя бы те же MVC). с граф. редактором. и текстовым литературным препроцессором.

само на себе, как bootstrappable.org и примеры из егойной вики.

то есть: хвалёный метапрог «сам на себе»

а не тупо «тыкалка в блочёчки с проводочкаме».

anonymous
()
Ответ на: комментарий от peregrine

Не вижу принципиальной разницы что бы переводить свою кодовую базу со второго на третий. Юникодом не пользуюсь, остальное или не нужно или не критично.

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

AntonI ★★★★★
() автор топика
Ответ на: истории узбека Pharo от anonymous

ещё есть такой смоллток: spry

раз уж заговорили о питоне. питон, значит, Nim.

Nim, значит AST макросы и CTFE, компиляция через сишечку.

смоллток – значит эти объекты смоллтоковы транслируются в AST, который затем через Nim транслируется в сишку и intrinsincs прямо на Nim/C/etc.

в этом идея и концепт spry

anonymous
()

Нда…

Задача на пару-тройку часиков на любом доступном языке программирования.

Зачем разводить целую тему вместо - сесть и запилить.

HIS
()

Можно наверное в LaTeX, но сходу вышло как то муторно;-(

будь мужиком, пиши сразу PostScript ! :-)

требуемая картинка, она прямо-таки эталонная для «по быстрому выучить ещё один язык»

MKuznetsov ★★★★★
()
Ответ на: комментарий от anonymous

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

Если типа хелоуворлд писать на один входной и один выходной файл, что если ошибся с входными данными то сам дурак… и выдавать например только в PNG, то да - минут 10-15 с отладкой.

HIS
()
Ответ на: комментарий от HIS

А как же юникс-вей? Пускай выгребает и складывает шелл. Спецэффекты для девачек. Для разных форматов есть rsvg-convert — отлично работает! Единственное, что стоит добавить, так это парсинг входных данных.

anonymous
()
Ответ на: комментарий от anonymous

Симпатично! Поржал!

Хеллоуворлд на славу! :)

HIS
()
Ответ на: комментарий от anonymous

А как же юникс-вей?

Все ведь орут второе десятилетие, что Linux - десктопная операционка уже. Нужно поддерживать тренд!

Чтобы любая домохозяйка в стиле @AntonI, который наверне так и не разобрался с вынужденными округлениями при вычислениях на процессорах, смог пользоваться приложением тыкая мышкой в контролы одной рукой, а вторую положить под попу, чтобы не мёрзла. ;)

HIS
()
Ответ на: комментарий от HIS

Я согласен, что будет лучше, если конечному пользователю будет удобнее. Самый идеальный вариант — это чтобы роботы сами рисовали эти всратые графы и творили прогресс, а мы бы с вами попивали манговые коктейли в тени пальм на пляже тропического острова и только говорили бы им, что улучшить.

Как говорится, и графы рисуются и руки не мёрзнут. Красота! Да, и ещё у каждого был бы свой робот-домохозяйка, у которого можно было бы справиться о текущем прогрессе в области домохозяйка-ориентированного рисования графов из кружочков и палочек и о готовности линукса для десктопа.

Эх, вот бы щас так! А, с другой стороны, удобство — дело субъективное. Возможно, что и не любой домохозяйке, рисующей графы, проще мышкой тыкать. А у кого-то и вовсе может быть аллергия на манго.

;)

anonymous
()
Ответ на: комментарий от i-rinat

Симпатично. Действительно прикольно.

А можно чтобы узлы казались выпуклыми?

HIS
()
Ответ на: комментарий от i-rinat

Предлагаю снять анимационный фильм, на тему из комментария анона, который чуть выше. Режиссёр и сценарист уже имеются. Ты в деле?

anonymous
()
Ответ на: комментарий от i-rinat

Ладно :)

А вообще, у тебя, конечно, красиво граф рисуется. Интересно, можно ли какие-то другие «шейдеры» приделать, кроме rough?

anonymous
()

Подскажите может знает кто алгоритм автоматического расположения узлов планарного графа. Сначала просто чтоб без пересечений было (или минимум их), а потом и чтоб красиво все расположить. Ну типа примерно равномерное распределение узлов по плоскости и ограниченная максимальная длина ребра. А ну еще алгоритм автоматического выделения компонентов в отдельные графы (выделение более сильно связанных компонент). Давно мечтал о таком.

q0tw4 ★★★★
()
Ответ на: комментарий от AntonI

Не думаю, что такое можно скачать из репозитория. Нейросети, технологии будущего и всё такое… Хотя примитивные алгоритмы наверняка есть, да и эвристики всякие придумать можно. Эх, если бы я жил в 80-х можно было бы взять это как дипломную работу и прославиться. А сейчас народ на науку забил. Котиков им подавай. Ну может проблема только в том что я не умею гуглить…

q0tw4 ★★★★
()
Последнее исправление: q0tw4 (всего исправлений: 1)
Ответ на: комментарий от q0tw4

Э… не знаю какой народ на науку забил, у нас с наукой все хорошо;-)

Но по Вашему вопросу - я не специалист по теории графов. Посмотрите вес таки что умеет graphviz в этом плане (если еще не смотрели).

AntonI ★★★★★
() автор топика
Ответ на: комментарий от anonymous

вполне можно рисовать ими некоторый условный метапрог из utf-8 сразу в PostScript и PDF.

;) «испокон веков метапрог рос из визуальных диаграмм» … ты же предлагаешь использовать текстовые языки, одумайся покайся

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.