FDA算法,Force Directed Algorithm,一种点线图的布局算法,找了半天没有有关描述,只有根据原始英文文档的理解写一下。

定义:

  • area=W*L WL为画布的宽度和长度

  • V 点集  E 边集

  • k = sqrt(area/|V|)

  • fa(z) = z*z/k

  • fr(z) = k*k/z

   k为点密度的开根号。

   fa计算了相关的点点距离平方除以k,该算式用来计算引力,距离越大,引力越恐怖,同时,点越多越容易被吸引到有连线的点周围。

   fr计算不相关的点斥力,点密度除以点距离,距离越远斥力越小,点越多被推开的距离越近。连线对点的影响更大,相关的点计算引力时使用了距离的平方,而不相关的在计算斥力时计算的结果总是相对较小的。


对每个点v

   对每个不和v相连的点u做如下运算:

       e = v.pos-u.pos

       v.disp = v.disp+(e/|e|)*fr(|e|)

   每个点包含了两个向量 pos 位置向量