图形间距算法

5
我正在寻找一种算法,可用于确定要在屏幕上显示的多个对象的X和Y坐标。每个对象可以与另一个对象相关联,并且可以存在任意数量的关系以及任意数量的这些对象。
对于要显示这些对象的整个区域没有限制。
我将使用php编写此代码,并将坐标存储在数组中。
2个回答

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])

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

您可能需要尝试不同的力学规律。特别是,您希望相邻的对象能够迅速达到平衡状态。我建议您尝试与距离成线性关系的力强度(如弹簧)或二次方关系(万有引力/电吸引力)。

此外,您可能需要随机移动对象以防止图形部分保持不变。在最初的迭代中,随机移动的数量应该很大,并随时间而减少。


我想在您已经提出的基础上添加一个细微之处:如果对象相互链接,它们之间的相互吸引应该在一定距离内停止。当它们靠近时,它们应该开始互相排斥。当然,这种行为可以被纳入“吸引力”函数并建模为负吸引力。通过这种方式,链接对象将寻求彼此之间的某个标准距离。 - Ideogram

0

你想要做的传统名称是图形布局图形绘制。 这通常不是一个容易的问题。 如果图表是平面或几乎平面,那么它们才会看起来好看。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接