3d-force-graph笔记(9):节点间多条关系线

节点间添加多条关系线,数据结构上无需变化,依旧是源节点source和目标节点target

sourcetarget可以是同一个节点,即指向自身。

"links": [
    {
        "source": "id1",
        "target": "id2"
    },
    {
        "source": "id1",
        "target": "id2"
    },
    ...
]

默认情况下,节点间的多条关系线会重合,表现上还是一条线。

按官方做法,用两个属性来处理:

  • linkCurvature(曲率)- 分离各个关系线
  • linkCurveRotation(旋转度)- 将分离在二维上的关系线,转到三维空间
... data
links: [
    { source: 3, target: 2, curvature: 0.4, rotation: Math.PI / 2 },
    { source: 2, target: 3, curvature: 0.4, rotation: Math.PI },
    { source: 3, target: 2, curvature: 0.4, rotation: -Math.PI / 2 },
]
...

const Graph = ForceGraph3D()
  (document.getElementById('3d-graph'))
    .linkCurvature('curvature')
    .linkCurveRotation('rotation')
    .linkDirectionalParticles(2)
    .graphData(gData);

curvaturerotation的算法不固定,可自定义。一般根据两个节点间的关系线数量来均匀计算,curvature保持相同,rotation均分360度,如此多条关系线表现上像“灯笼”。

官方demo:https://vasturiano.github.io/3d-force-graph/example/curved-links/

官方demo源码:https://github.com/vasturiano/3d-force-graph/blob/master/example/curved-links/index.html