力學圖的布局中有很多參數,本文將逐個說明。
D3 中的力學圖布局是使用[韋爾萊積分法](http://zh.wikipedia.org/wiki/%E9%9F%A6%E5%B0%94%E8%8E%B1%E7%A7%AF%E5%88%86%E6%B3%95)計算的,這是一種用于求解牛頓運動方程的數值方法,被廣泛應用于分子動力學模擬以及視頻游戲中。定義布局的代碼如下:
~~~
var force = d3.layout.force()
~~~
即可,D3 中提供了 17 個函數用于設定其參數和事件,在所有布局中是最多的,下面將對其進行說明。
## size()
用于設定力學圖的作用范圍,使用方法為 force.size( [ x , y ] ),這個函數用于指定兩件事:
- 重力的重心位置為 ( x/2 , y/2 )
- 所有節點的初始位置限定為 [ 0 , x ] 和 [ 0 , y ] 之間(但并非之后也是如此)
如果不指定,默認為 [ 1 , 1 ] 。
## linkDistance()
指定結點連接線的距離,默認為20。如果距離是一個常數,那么各連接線的長度總是固定的;如果是一個函數,那么這個函數是作用于各連接線( source , target )的。
## linkStrength()
指定連接線的堅硬度,值的范圍為[ 0 , 1 ],值越大越堅硬。其直觀感受是:
- 值為1,則拖動一個頂點A,與之相連的頂點會與A保持linkDistance設定的距離運動
- 值為0,則拖動一個頂點A,與之相連的頂點不會運動,連接線會被拉長
## friction()
定義摩擦系數的函數,值的范圍為[ 0 , 1 ],默認為0.9。但是這個值其實并非物理意義上的摩擦,其實其意義更接近速度隨時間產生的損耗,這個損耗是針對每一個頂點的。
- 值為1,則沒有速度的損耗。
- 值為0,則速度的損耗最大。
##charge()
設定引力,是排斥還是吸引,默認值為-30。
- 值為+,則相互吸引,絕對值越大吸引力越大。
- 值為-,則相互排斥,絕對值越大排斥力越大。
## chargeDistance()
設定引力的作用距離,超過這個距離,則沒有引力的作用。默認值為無窮大。
## gravity()
以 size 函數設定的中心產生重力,各頂點都會向中心運動,默認值為0.1。也可以設定為0,則沒有重力的作用。
## theta()
頂點數如果過多,計算的時間就會加大(O(n log n))。theta 就是為了限制這個計算而存在的,默認值為0.8。這個值越小,就能把計算限制得越緊。
## alpha()
設定動畫運動的時間,超過時間后運動就會停止。其實
- force.start() 即 alpha(0.1)
- force.stop() 即 alpha(0)
謝謝閱讀。
### 文檔信息
- 版權聲明:署名(BY)-非商業性(NC)-禁止演繹(ND)
- 發表日期:2014 年 11 月 15 日
- 更多內容:[OUR D3.JS - 數據可視化專題站](http://www.ourd3js.com/) 和 [CSDN個人博客](http://blog.csdn.net/lzhlzz)
- 備注:本文發表于 [OUR D3.JS](http://www.ourd3js.com/) ,轉載請注明出處,謝謝