G6: 紧凑树计算位置出错

Created on 10 Jan 2021  ·  7Comments  ·  Source: antvis/G6

如下图所示,在第 3 列中绿色卡片与白色卡片并未相交, 但由于第 5 列太宽了,绿色卡片就与白色卡片间出现了间隙。

我 fork 了你的代码,demo 中是造好的数据,你可以下载下来快速查看。链接点我

希望得到你的帮助,谢谢!
image

我对这个项目也非常感兴趣,如果你们已有解决方案,但还未来得及修改的话,可以给我大概讲讲怎么改,我来修改并提 PR

Most helpful comment

我把这个优化加到 #2535 中哈

All 7 comments

从图片中没有看出绿色节点位置有问题呀?你期待放在哪里。demo 的话请提供在线的 demo,codepen.io 或者 codesandbox 都行

根据紧凑树的特性,我认为第三列的 绿色节点应该和白色节点紧挨者才对,

我觉得是应该空出来才合理诶,算法设计上就是会考虑到其他子树的高度然后放置同层的节点位置。

但是绿色节点现在并没有子树。紧凑树的布局规则应该是:两个节点的子树有相交,才会将这两个节点撑开。

image

你看,现在如果它有两个子节点,但这两颗树但子树与下面那颗树的间距还是很大。

我看了一下绝云大佬的代码,,看了下相关论文,觉得算法大概逻辑应该是这样:

  1. 算法一开始会给每一个叶子节点赋一个初始值
    image

  2. 递归给父节点赋值
    image

  3. 判断左右子树是否相交
    就是左树的右侧 与 右树的左侧有没有相交,有相交的话就将这左右子树的间距加大。
    image

但是,算法遗漏了下面这种情况

image

我 fork 的这个 repo 可以很方便的复现这个场景,跑起来就能看到,在线的不太好整,还请理解哈, 感谢你的帮助!

git clone https://github.com/huyaocode/hierarchy.git
cd hierarchy
yarn
yarn start

我把这个优化加到 #2535 中哈

请问这个算法bug已经被解决了么

Was this page helpful?
0 / 5 - 0 ratings