0

在 d3.JS 上的力有向图中,d3 使用 verlet 积分,其中它累积由于多体力和由于每个链接或边缘而产生的力的速度。

每次迭代后它都会这样做:

  for (i = 0; i < n; ++i) {
        node = nodes[i];
        if (node.fx == null) node.x += node.vx *= velocityDecay;
        else node.x = node.fx, node.vx = 0;
        if (node.fy == null) node.y += node.vy *= velocityDecay;
        else node.y = node.fy, node.vy = 0;
      }

为什么它使用verlet积分,它比在每次迭代中计算简单位移并在每次迭代后添加FRUCHTERMAN建议的算法有什么优势

D := v.pos - u.pos; //u and v are two node of edge
v.disp := v.disp + ( D /| D |) * fr (| D |) //fr is repulsive force

即使我们忽略这个算法,我们也会计算每个节点中每个力的位移,无论是反射力还是吸引力,并添加到初始位置。

我不明白这和 verlet 集成有什么区别。与此相比,verlet 的优势是什么?

作为参考,这个位移代码来自这个算法:

在此处输入图像描述

4

0 回答 0