我有一个 Webcola&D3 svg 图,它们之间有节点和链接。直到今天,节点之间的链接可能是单向的,如果 B 连接到 A,则它只是单向链接。
今天有人告诉我我需要支持 2 路链接,这意味着 A 可以向 B 发送链接,B 可以向 A 发送链接。
现在我对数学以及如何完成它感到困惑,我使用了一些我发现的算法来绘制链接,直到今天我猜想从节点的中心绘制链接,我需要像这样并行显示 2 路链接:
这是我用来计算链接位置的算法:
let parent = connection.parent;
const sx = parent.source.x;
const sy = parent.source.y;
const tx = parent.target.x;
const ty = parent.target.y;
let angle = Math.atan2(ty - sy, tx - sx);
const radiusSource = parent.source.radius;
const radiusTarget = parent.target.radius;
let x1 = sx + Math.cos(angle) * radiusSource;
let x2 = tx - Math.cos(angle) * radiusTarget;
let y1 = sy + Math.sin(angle) * radiusSource;
let y2 = ty - Math.sin(angle) * radiusTarget;
angle = angle * 180 / Math.PI;
let opposite = Math.abs(angle) > 90;
if (opposite)
angle -= 180;
connection.coords = [x1, y1, x2, y2, angle, opposite];
return connection.coords;
这是函数的一部分,其结果进入路径的“d”属性,如下所示:
.attr('d', `M${x1} ${y1} L ${x2} ${y2}`)
现在 2 路链接的结果是它们相互覆盖,任何人都可以帮我改进这个算法,这样它就会使 2 路链接是并行的吗?