Javascript 使用D3在两个节点之间绘制两条平行线
我试图对一个中心节点进行可视化,该节点连接到它周围的节点。当前,在中心节点和每个其他节点之间有一条线。我想把它改成两条不同宽度和颜色的平行线(一条显示通话信息,另一条显示文本信息)重要的是,这两条线必须紧靠在一起,并且它们之间没有空间,也没有重叠 编辑:mdml的答案和LarsKotthoff的评论帮助了我。然而,正如我在评论中看到的,我仍然面临一些问题:偏移似乎将两条线推向了更大的线的方向(参见imgur.com/Fwri75T)。我真的不明白。我已经在这里更新了代码。完整代码可在以下位置找到:Javascript 使用D3在两个节点之间绘制两条平行线,javascript,d3.js,visualization,data-visualization,graph-visualization,Javascript,D3.js,Visualization,Data Visualization,Graph Visualization,我试图对一个中心节点进行可视化,该节点连接到它周围的节点。当前,在中心节点和每个其他节点之间有一条线。我想把它改成两条不同宽度和颜色的平行线(一条显示通话信息,另一条显示文本信息)重要的是,这两条线必须紧靠在一起,并且它们之间没有空间,也没有重叠 编辑:mdml的答案和LarsKotthoff的评论帮助了我。然而,正如我在评论中看到的,我仍然面临一些问题:偏移似乎将两条线推向了更大的线的方向(参见imgur.com/Fwri75T)。我真的不明白。我已经在这里更新了代码。完整代码可在以下位置找到
我将以与第一条线完全相同的方式添加第二条线,起点和终点位置略微偏移。如何确保这些线不重叠?这取决于位置偏移的程度。将沿着垂直于连接它们的线移动点。移位量直接转换为它们之间的距离,因此可以在不重叠的情况下使用宽度。数学中的符号错误。atan2:
function total_width(d) {
return (d.inc_calls + d.out_calls + d.inc_texts + d.out_texts) / max_interactions * line_width_factor;
}
var line_diff = 1;
function line_perpendicular_shift(d, direction) {
theta = getAngle(d);
theta_perpendicular = theta + (Math.PI / 2)*direction;
width = total_width(d) + line_diff
// Both lines are pushed 1/4, moving the center by 1/2, causing the two lines to connect exactly at the middle.
delta_x = width / 4 * Math.cos(theta_perpendicular)
delta_y = width / 4 * Math.sin(theta_perpendicular)
return [delta_x, delta_y]
}