<记录一下>

目前碰到的问题:

  1.设备数目大了之后,缩放过的设备图片,密集的线段显得不是很美观;

  2.有些特殊的布局的呈现效果不是很理想,比如两个星型结构相连的结构;

  3.运行步数以及停止条件的问题,及呈现过程停下来速度太慢、有抖动的现象;

  4.在浏览器运行的效率的问题,O(n^3)对于稠密图显然力不从心,单步复杂度O(n^2);

  5.线段的箭头显示问题,显示在线段中央有点差强人意。

解决方案:

  1.参照google地图,把各个设备按照出入度总和分级别,并且缩放的形式也参照google地图,按级别缩放。按照缩放级别来显示设备,缩放的级别越高能显出的节点越多,于此同时节点大小不进行缩放。

  2.目前节点之间的拉伸力度和节点距离是呈线性增长,之前由于考虑到限制节点的拉伸力的问题强制限定了拉伸力在一定范围内,解除这个限定能很有效的解决这个“双星”结构显示不正常的问题。

  3.运行步数不够难以保证节点分布达到要求,但是运行步数过多可能会造成用户等待过久的问题。由于这个问题通常是复杂结构、节点数大于某个阈值才会出现,那么在节点数超过这个阈值的时候就可以不使用计时器触发先计算N步(这里不需要draw,效率上会高10倍以上),然后在使用计数器调用函数并draw呈现出另外N步给用户,这样能有效的减少用户等待,并且分布效果也能达到一定要求。   抖动的问题,在第一点中按照分级给节点设定一个重量,模仿自然规律,不同重量受到力之后的加速度也会不同就可以缓解抖动的问题。

  4.复杂度的问题,总体呈现出来O(n^3)还是必要的,但是并不是一次就需要观看所有节点。所以应对节点特别多的情况可以使用另外一种方式,只计算于目前focus点路径小于一个数的节点,也就是说我只计算我理论上看得到的节点。在很多时候这个方法可以把总体的复杂度降低到O(n^2) (计算需要的点的过程涉及n次迭代,复杂度为O(n*(n-1)/2)=O(n^2) )。单步的复杂度为O(1);

  5. 显示在线段的尽头需要计算边界,曲线的情况下不是很容易计算而且同一设备上连接的线过多容易造成重叠,所以暂不更改。