力导向算法

力导向图

百科:力导向算法是指通过对每个节点的计算,算出引力和排斥力综合的合力,再由此合力来移动节点的位置。

力导向算法是根据自然界中电子直接互相作用的原理来实现的,自然界中。两个电子靠的太近会产生斥力,隔的太远会产生引力,这样保持一个平衡状态,最终达到维持物体的形态的目的,这里就涉及到了一个库仑定律。
最新版本的d3js里面的力导向算法就用四叉树算法对其进行了优化。
实现逻辑

如果要用代码去实现简化后的力导向图的布局,我们需要几个步骤。

  1. 设置点数据nodes, 链接数据links。
  2. 对点进行随机定位。
  3. 渲染视图
  4. 执行力算法计算位置,渲染视图
    重复执行4操作N次,得到想要的力导向图形。在执行力算法的时候,这里我们把库伦公式简化成了一次函数,所以,要么减一个数,要么加一个数去改变点的坐标。理解起来就很容易了,当然,实际上我们应该加上电子作用力(库伦公式)和弹簧力(胡克定律),让力导向的效果更接近自然界的作用结果。

基于力导向 (Force-directed) 的算法作为弹簧理论算法的一类典型,被广泛应用于描述社交网络等关系型信息图。它的原理其实非常易懂,我们可以把整张网络想象成一个虚拟的物理系统。系统中的每个节点都可以看成是一个带有一定能量的放电粒子,粒子与粒子之间存在某种库仑斥力,使它们两两相互排斥。同时,有些粒子间被一些“边”所牵连,这些 边产生类似弹簧的胡克引力,又紧紧牵制着“边”两端的粒子。在粒子间斥力和引力的不断作用下,粒子们从随机无序的初态不断发生位移,逐渐趋于平衡有序的终 态。同时整个物理系统的能量也在不断消耗,经过数次迭代后,粒子之间几乎不再发生相对位移,整个系统达到一种稳定平衡的状态,即能量趋于零。此刻,最终的 这幅理想的社交网络图也基本绘制完成。

  1. 随机分布初始节点位置;
  2. 计算每次迭代局部区域内两两节点间的斥力所产生的单位位移(一般为正值);
  3. 计算每次迭代每条边的引力对两端节点所产生的单位位移(一般为负值);
  4. 步骤 2、3 中的斥力和引力系数直接影响到最终态的理想效果,它与节点间的距离、节点在系统所在区域的平均单位区域均有关,需要开发人员在实践中不断调整;
  5. 累加经过步骤 2、3 计算得到的所有节点的单位位移;
  6. 迭代 n 次,直至达到理想效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值