我正在尝试找到一种以干净,严格的基于网格的方式呈现DAG的方法,并且这种方法非常简短。
我想渲染看起来像这样的东西:
┌───────────┐ ┌───────────┐
┌───│ b │─────▶│ d │
│ └───────────┘ └───────────┘
│
┌───────────┐ │ ┌───────────┐ ┌───────────┐
│ a │◀─┼──▶│ c │──┬──▶│ e │
└───────────┘ │ └───────────┘ │ └───────────┘
│ │
│ │ ┌───────────┐
└──────────────────┴──▶│ f │
└───────────┘
这将是以下依赖性的图形表示:d(b), b(a), e(c), f(c), c(a)
。 (box(depends on)
。
我已经对“力导向”图进行了广泛的研究,但这似乎没有必要,因为我有两个约束,它们应严格位于网格上,而不是严格分层。
我无法找到有关布局算法设计的足够文献的替代方法包括对“树形布局”,“过程布局”,“决策布局”的各种理解(请参见here)>
我的最终目标是为d3(或类似产品)制作一个布局引擎,以进行交互式交互:
到目前为止,我最好的理论是:
遍历图形,找出有多少列,如果视口太多,则考虑折叠最左边的项目。
开始将内容放置在列中,将最长链的内容放置在更右端,而较小或没有链的内容放置在左端。
如果列中的某项在同一列中具有依赖项,请将所有列移到左侧,并允许该依赖项代替它。
画线,如果算法仅考虑宽泛的“网格位置”而不是绝对像素值,这应该很容易,而从A1
(单元格{{1 }})到a
(单元格B1
);
c
我的方法基本正常吗?我该如何解决这个问题?有人会建议在编写诸如此类的布局引擎时读什么书?