图间距算法

Dav*_*vid 5 php algorithm graph

我正在寻找一种算法,可用于确定屏幕上显示的数字对象的xy坐标.每个对象可以与另一个对象相关,并且可以存在任意数量的关系,并且可以存在任意数量的这些对象.

对显示这些对象的区域的总体大小没有限制.

我在php中写这个,并希望将坐标存储在一个数组中.

Gui*_*ume 3

一种方法是使用伪物理模型。如果物体相连,它们就会具有排斥力和吸引力。

您可以根据施加到对象上的力的总和来移动对象:在每一步计算施加到对象上的力的总和并将其沿力的方向移动。

在伪代码中,一次迭代将是:

for each object o1
   force[o1] = 0
   for each object o2
      if o1 and o2 are linked
         force[o1] += attraction_force(o1, o2)
      else
         force[o1] += repulsion_force(o1, o2)

for each object o1
   move(o1, force[o1])
Run Code Online (Sandbox Code Playgroud)

当对象达到稳定状态时停止迭代。

您可能需要尝试不同的力定律。特别是,您希望相邻对象快速达到平衡。我会尝试与距离成线性(如弹簧)或二次(重力/电吸引力)的力强度

此外,您可能需要随机移动对象,以防止图形的某些部分保持卡住状态。第一次迭代的随机移动量应该很大,并随着时间的推移而减少。