Я хотел бы нарисовать график , состоящий из узлов и ребер, с использованием алгоритма компоновки пружины (своего рода сило-направленного макета)
После того, как график выложен, я бы хотел, чтобы пользователь мог интерактивно добавлять новые узлы, и позволял макету развиваться , то есть позиционирование новых узлов при сохранении предыдущей «формы» (без перемещения уже позиционированного элемента). слишком много узлов).
Я имею в виду что-то вроде того, что WordVis делает на http://www.wordvis.com.
В настоящее время я использую пружинный макет, доступный в библиотеке GraphDracula . Это «простой», что означает, что если вы измените макет графика, вы можете получить совершенно другой макет (я думаю, это связано с вызовами Math.rand
в алгоритме)
Какой алгоритм / стратегия делает то, что я хотел бы сделать?
Я вижу, что Layouter графдракулы устанавливает начальный узел pos на ноль, а затем выполняет итерацию для вычисления позиций конечных узлов.
Предположим, что я добавляю набор узлов newNodes
, смежных с expandedNode
: для поддержания существующей фигуры, достаточно ли установить начальное положение каждого из newNodes
на одно из expandedNode
, а затем применить силы ко всем узлам еще раз?
Есть ли у вас какой-либо указатель на алгоритм, который не только размечает график, но также позволяет добавлять новые узлы, изменяя макет всего графика, не меняя слишком много чертежа?
Любая подсказка приветствуется.
В настоящее время я работаю с javascript, но язык не важен.