图间距算法

时间:2010-04-18 09:37:10

标签: php graph algorithm

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

对显示这些物体的区域的整体大小没有限制。

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

2 个答案:

答案 0 :(得分: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])

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

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

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

答案 1 :(得分:0)

您想要做的传统名称是图表布局 graph drawing 。 这通常不是一个简单的问题。 如果它们是planar或几乎是平面的,那么图表看起来会很好。