是否有用于绘制力导向图的简单(-ish)算法?

Is there a simple(-ish) algorithm for drawing force-directed graphs?

我正在尝试在 P5js 中编写一个小型图形可视化工具,但找不到可遵循的简单(-ish)算法。

我找到了用 D3 实现的方法,并且找到了一些密集的教科书片段(如 this),但我正在寻找介于两者之间的东西。

谁能解释绘制图形(力导向或其他)的最简单算法或为我指出一个好的资源?

感谢您的帮助!

我刚开始something similar

编写代码相当容易,您只需考虑作用在每个节点上的 3 个独立的力,将它们加在一起并除以节点的质量即可得到每个节点的运动。

  1. 重力,将一个简单的力作用于 canvas 的中心,这样节点就不会脱离框架

  2. Node-Node replusion,您可以使用库仑力(描述粒子-粒子排斥)或使用gravitational attraction equation并将其反转

  3. 连接力,这个有点棘手,定义一个连接为2个节点和它们之间的距离。当它们之间的实际距离与定义距离不同时,在连接方向上加一个力乘以定义和实际距离之间的差值