Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用D3在两个节点之间绘制两条平行线_Javascript_D3.js_Visualization_Data Visualization_Graph Visualization - Fatal编程技术网

Javascript 使用D3在两个节点之间绘制两条平行线

Javascript 使用D3在两个节点之间绘制两条平行线,javascript,d3.js,visualization,data-visualization,graph-visualization,Javascript,D3.js,Visualization,Data Visualization,Graph Visualization,我试图对一个中心节点进行可视化,该节点连接到它周围的节点。当前,在中心节点和每个其他节点之间有一条线。我想把它改成两条不同宽度和颜色的平行线(一条显示通话信息,另一条显示文本信息)重要的是,这两条线必须紧靠在一起,并且它们之间没有空间,也没有重叠 编辑:mdml的答案和LarsKotthoff的评论帮助了我。然而,正如我在评论中看到的,我仍然面临一些问题:偏移似乎将两条线推向了更大的线的方向(参见imgur.com/Fwri75T)。我真的不明白。我已经在这里更新了代码。完整代码可在以下位置找到

我试图对一个中心节点进行可视化,该节点连接到它周围的节点。当前,在中心节点和每个其他节点之间有一条线。我想把它改成两条不同宽度和颜色的平行线(一条显示通话信息,另一条显示文本信息)重要的是,这两条线必须紧靠在一起,并且它们之间没有空间,也没有重叠

编辑: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]

 }