我正在尝试开发一个分层树的视图,其中每个节点的权重是它拥有的实际子节点数。叶节点的权重为1。
我希望通过在开头显示根类别(没有父级)来浏览这些项目以便更深入到树中。单击某个节点会使视图重绘为仅显示该节点的子节点。
棘手的部分是,与邻接节点相比,节点的像素大小应与其权重成比例。根据维基百科,这被称为treemapping,我需要的是一个平铺算法,我试图自己弄清楚,但它似乎比我预期的更复杂..
举个例子,Mac OS X程序名为 GrandPerspective ,显示 HD 的文件夹大小:
alt text http://origin.arstechnica.com/journals/apple.media/540/GrandPerspectiveScreen.png
我想以这样的方式安排节点! (当然大小与文件夹大小成正比)
有什么建议吗?
由于
答案 0 :(得分:2)
您显示的文件系统示例中使用的数据结构很可能是KD tree。我不确定你要解决的问题如何映射到文件系统示例,但这就是我自己解决文件系统案例的方法:
首先是一个代表硬盘根目的矩形。 您获取目录中的所有文件和目录,并为它们指定大小。
现在,您尝试将此列表切割为两个尽可能相同大小的列表。现在,您将输入矩形切割为两个矩形,其大小与您将输入文件切割成的两个列表相同。您应该沿着比输入矩形大小更短的轴进行切割,以确保始终具有尽可能方形的矩形。现在,您可以在两个列表上以递归方式运行算法及其对应的矩形。
基本案例将是:
答案 1 :(得分:2)
这是一个方形树形图。您可以阅读the paper解释此技术。