2013-04-25 67 views
2

基於Michael Bostock的「Molecule」示例,可在此URL中獲得:http://bl.ocks.org/mbostock/3037015d3.js - 將鏈接大小設置爲強制佈局

我試圖用幾個值來設置我的鏈接的大小。爲此,我禁用了「重力」,在「充電」中放置了一個重要的負值,並將第一個節點固定到窗口的中心。

var force = d3.layout.force() 
    .size([width, height]) 
    .charge(-800) 
    .friction(0.45) 
    .linkStrength(1) 
    .gravity(0) 
    .linkDistance(function(d) { 
     return radius(d.target.size * 10); 
    }); 

我的問題是(as you can see on the image below)有時鏈路的大小是型動物,特別是對於具有一個小值定義的鏈接。

有人知道我的問題有一個很好的解決方案嗎?

你可以看到我的代碼在這裏:http://jsfiddle.net/awPn3/

回答

3

這是力佈局的特性,即鏈路的長度是可變的 - 點是,節點會自動佈局,你不必擔心它。您可以實施檢查,確保距離始終是您希望的距離,但這會非常困難。

您正在使用的linkDistance函數是唯一直接強制執行此限制的方法。如果這還不夠,就沒有簡單的方法來減輕它。您唯一的選擇是在模擬的每個勾號處執行像我上面提到的檢查。

+0

謝謝。你可以給我一個例子嗎? – user1528760 2013-04-25 14:10:01

+0

我不知道有任何這樣的例子。這將是相當複雜的實施,我不認爲有人做過。 – 2013-04-25 14:18:29

+0

好的謝謝。你怎麼看待爲每個節點實施排斥力? – user1528760 2013-04-25 14:58:01

0

我想它會幫助你修改你使用的函數,也考慮到兩端對象的大小。讓解決方案針對設置兩個對象之間的「可見」距離進行優化:例如(d.source.size + d.target.size)+ desired_distance

相關問題