2010-04-18 26 views
5

我正在尋找一種算法,該算法可用於確定要在屏幕上顯示的數字對象的xy座標。每個對象都可以與另一個對象相關聯,並且可以有任意數量的關係,並且可以有任意數量的這些對象。圖形間距算法

對顯示這些對象的區域的總體大小沒有限制。

我正在寫這個在PHP中,並希望將座標存儲在一個數組中。

回答

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

和停止迭代時,對象已經達到了穩定狀態。

您可能需要試驗不同的力法則。特別是,你想讓相鄰的物體很快達到平衡。我將與力強度線性的距離(如彈簧)或二次( - 重力/電引力)

您也可能需要隨機移動的對象,以防止圖形的某些部分從剩餘實驗stucked。第一次迭代的隨機移動量應該很大,並隨着時間的推移而減少。

+0

我想添加一個微妙的,你已經做的頂部:如果對象被鏈接,相互吸引應該停止在距離彼此一定距離。當他們靠近時,他們應該開始排斥海誓山盟。當然,這種行爲可以被納入「吸引力」的功能,並被塑造爲負面吸引力。這樣,鏈接的對象會從彼此中尋找一定的標準距離。 – Ideogram 2016-01-25 13:20:46

0

你想要做什麼的傳統名稱是圖佈局graph drawing。 這不是一個簡單的問題。 這些圖表只有在planar或接近平面時纔會看起來不錯。