我正在寻找一种算法,可用于确定要在屏幕上显示的数字对象的x y坐标。每个对象都可以与另一个对象相关,并且可以有任意数量的关系,并且可以有任意数量的这些对象。
对显示这些物体的区域的整体大小没有限制。
我在php中写这个,并希望将坐标存储在一个数组中。
答案 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或几乎是平面的,那么图表看起来会很好。