iOS Dev数据库

D3力导向图

2018-03-02  本文已影响2746人  HeyDelilah

2017年5月8日

一、背景

力导向图非常适合于渲染关系型信息图。

二、什么是力导向图(Force-directed)?

我们可以把整张 Network 想象成一个物理仿真系统(Simulation)。系统中的每个节点(Node)都是一个带有能量的粒子,粒子与粒子之间存在斥力(如模拟库伦斥力),而被边(Link)所连结的粒子受到牵引力(如模拟胡克弹力)。系统中的粒子在斥力和引力的不断作用下,从随机无序的布局(Layout)不断发生位移,逐渐趋于平衡有序的布局。同时整个仿真系统的能量也在不断消耗,经过数次迭代后,粒子之间不再发生相对位移,整个系统达到最终稳定平衡的状态。

此动效实现的本质就是每一帧都重新渲染图中节点的位置(x,y), 节点的位置(x,y)是由节点上一帧所处的位置(x,y)+速度(vx,vy)所决定的。而速度就是通过力学模型所计算出来的。

关键在于力(Forces)D3.js 中内置了几种经典的力模型:

1. 中心力(Centering)

中心力可以使得节点最终布局是围绕着某个中心的。相当于某个中心点对所有的节点都有一个制约,不会让布局的中心偏离。

2. 碰撞力(Collision)

3. 牵引力(Links)

4. N 体力(Many-Body)

N体问题是天体力学的一种力学模型,它研究 N 个质点相互之间在万有引力作用下的运动规律。

5. 方向力(Positioning)

方向力分为 X 方向和 Y 方向,即将作用力限制在一个维度上( X 维度或者 Y 维度)


说明

三、最终效果

通过控制右侧面板,所见即所得地为 Chart 添加不同的力,用户可灵活定制想要的效果。

四、相关资料

  1. D3 官方文档:d3-force
  2. Use the Force! Trulia, September 2011 (slides)
  3. AN A TO Z OF EXTRA FEATURES FOR THE D3 FORCE LAYOUT
  4. 力导向算法原理分析
上一篇 下一篇

猜你喜欢

热点阅读