我试图使用d3.js和d3.dag构建一个类关系图模型查看器
这个查看器最关键的部分是它应该能够最优地定位节点,这样我们就不会有链路交叉(只要有可能),并且应该能够清楚地看到与什么相关的内容。
我们知道:
我们希望:
我需要的是理论上的。
是否有任何已知的算法可以解决上述问题(语言不重要,我只需要理论参考)
举例如下
示例1.
电流

可达

完美

示例2.
电流

可达

完美

示例3.
电流

可实现和完善的

示例4.
电流

可达

完美

示例5.
电流

可达

完美

示例6.
电流

完美

更新
在这种情况下,传统的(节点到节点链接)交叉已经最小化(多亏了d3-dag)。问题是,我们没有唯一的节点到节点的关系,我们还有一个节点对行的关系,在这种情况下,d3-dag会失败。
发布于 2019-02-23 22:26:31
发布于 2022-07-31 22:25:36
我不确定这是否仍然是一个问题,但如果是,您能详细说明什么“行->行”关系吗?对于哪些节点属于哪一行,这是一个严格的定义吗?最近版本的d3-dag支持节点的等级标准,它为节点行指定了相等约束的相对顺序,但这可能不是您要寻找的。
如果你只想重新定位边缘,可能有办法拉出d3-dag的内部,只需做交叉最小化。从本质上说,d3完成了大多数分层布局所做的工作,将边缘划分为各节,并更改每一行中每条边的顺序。在设置了顺序之后,就可以很容易地分配坐标。如果你能这样表达你的问题,你应该能够使用像这这样的代码来把它描述成一个整数线性规划,并找到最优的边缘布局。
https://stackoverflow.com/questions/54768354
复制相似问题