Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.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 无重叠节点的节点间连接绘制算法_Javascript_Algorithm_Graph - Fatal编程技术网

Javascript 无重叠节点的节点间连接绘制算法

Javascript 无重叠节点的节点间连接绘制算法,javascript,algorithm,graph,Javascript,Algorithm,Graph,图中有一系列节点。节点由用户放置在特定位置。这些节点保证不会重叠,事实上,它们之间有一个空间缓冲区。这些节点是连接的,每条边在特定点处连接到一个节点。我需要在节点之间绘制边,以便边: (必需)不要与父节点重叠 (理想情况下)不会与任何节点重叠 我不担心交叉路口。如果在Javascript中实现了这一点,将获得额外的积分。我无法使用Javascript之外的任何库。如果您熟悉C#和.NET,您可以通过ILSpy浏览Microsoft.GLEE库(描述为和),甚至理论上可以将此源代码保存到.cs

图中有一系列节点。节点由用户放置在特定位置。这些节点保证不会重叠,事实上,它们之间有一个空间缓冲区。这些节点是连接的,每条边在特定点处连接到一个节点。我需要在节点之间绘制边,以便边:

  • (必需)不要与父节点重叠
  • (理想情况下)不会与任何节点重叠

我不担心交叉路口。如果在Javascript中实现了这一点,将获得额外的积分。我无法使用Javascript之外的任何库。

如果您熟悉C#和.NET,您可以通过ILSpy浏览Microsoft.GLEE库(描述为和),甚至理论上可以将此源代码保存到.csproj,修改并重新编译为Javascript。

一种解决方案可以使用:

“Bézier曲线由一组控制点P0到Pn定义, 其中n称为其阶数(n=1表示线性,2表示二次,等等)。 第一个和最后一个控制点始终是系统的终点 曲线;但是,中间控制点(如有)通常会 不在曲线上

因此,基本思想是使用父节点作为中间控制点。也可以使用边的点作为中间控制点,以避免边重叠

在维基文章中,你可以找到很好的解释

对于javascript实现我查看了以下LIB:

  • (LGPL许可证)具有一个完整的。它还使用HTML5和SVG实现了性能()
  • 关于谷歌代码

但如果你用谷歌搜索“javascript贝塞尔库”,你可以找到更多

看看d3.js强制定向图布局:。我还认为这个答案可能会有所帮助:从重叠的讨论中,我假设这不是一个图论意义上的图,具有无量纲节点。例如,您能否提供一个指向图形规则的链接?节点已经放置,因此任何重新排列节点的算法都没有帮助。我专门研究如何在不移动节点的情况下绘制边。http://What 你是说父节点吗?要在其中绘制边的节点?如果你从A到B画一条边,那么根据定义它将与A和B相交,不是吗?这是否意味着你并不总是想要直边?