我想绘制一个由节点和边组成的图形,使用弹簧布局算法(一种力导向布局)一旦布局了图形,我想让用户交互地添加新节点,并让布局演变,即在保持先前“形状”的同时定位新节点(不要过多地移动已经定位的节点)。
我的意思是WordVis在http://www.wordvis.com所做的事情。
我目前正在使用GraphDracula库中提供的弹簧布局器。这是一个“简单”的,这意味着如果你重新布局图形,你可能会得到一个完全不同的布局(我认为这是由于Math.rand
算法中的调用)
做我想做的事情的算法/策略是什么?
我看到 graphdracula 的布局器将初始节点 pos 设置为零,然后迭代以计算最终节点的位置。假设我添加了一组与:newNodes
相邻的节点expandedNode
以保持现有形状,是否足以将每个 的初始位置设置为newNodes
一个,expandedNode
然后再次将力施加到所有节点?
您是否有任何指向算法的指针,该算法不仅可以将图形布局一次,而且还可以让您添加新节点来重新布局整个图形而无需过多更改绘图?
欢迎任何提示。
我目前正在使用 javascript,但语言并不重要。