FR算法

FR算法将所有的结点看做是电子,每个结点收到两个力的作用:1. 其他结点的库伦力(斥力)2. 边对点的胡克力(引力)。那么在力的相互作用之下,整个布局最终会称为一个平衡的状态。

算法结构:
1. 给所有的点一个初始的随机位置
2. 计算每个点收到其他点的库伦力以及所有边对该点的胡克引力,得到该点受到的最终力。
3. 根据步骤2计算的力得到位置的偏移,调整布局中点的位置。
4. 迭代2,3直到网络区域平衡(全部结点的力的作用力较小),或者迭代达到一定的次数。

对于库伦力的计算:
库伦定理:真空中两个静止的电荷之间的相互作用力,与他们的电荷量的乘机成正比,与他们的距离的平方成反比。
在计算中,我们可以将点的点亮量度看成是1,具体的系数要根据布局图的大小来计算,使其得到一个相对的平衡。
所以,计算库伦力的公式演变成 k1/(distance*distance)

胡克定理:弹性物体的应力与应变成正比。
胡克定理的弹性系数也要根据时机情况而定,使其和库伦力保持一个相对的平衡。
所以,胡克力的公式演变成 k2*(distance – idea_distance)
Idea_distance为预期想要的边的长度。

个人理解:算法最终的结果使得整个网络区域一个平衡的位置,相对是比较对称的,边的长度也比较平衡。但是对于交叉的边边并不一定能够使其错开。所以对于边的交错比较严证的图,并不能很好的处理。如下:

这里写图片描述

但是我在网上看别人的demo跑出来的图,可以将其扭开。感觉代码也只有选取的系数不一样而已。不知道是不是自己的理解有偏差 (~ε(#…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值