0

我有一个数据库,其中包含许多假设人的信息。该数据旨在创建将相关人员连接在一起的图形。该图以适当的 c++ 数据结构表示家谱树。到目前为止,一切都很好。我的数据结构包含有关家庭的信息,每个人都是一个节点,都在树中适当地连接。

现在,问题来了,我不知道如何为这个家庭图生成可视化数据。对于任何给定的家庭,我需要生成一个典型的图表,就像您在传统家谱树中看到的那样。我打算用 OpenGL 渲染数据并设置好一切。我唯一的问题是如何为每个人的矩形生成正确的位置和大小,所以最终没有重叠,每一代人都坐在相同的垂直位置。然后,我必须添加连接视觉数据中每个节点的传统线,但这应该不是什么大问题。

是否有任何轻量级库准备执行此功能,或者有人可以帮助我实现解决此问题的算法吗?谢谢

4

2 回答 2

1

我推荐AT&T GraphVis库。Doxygen 使用这个库来绘制它的继承图,并调用树。

您也可以搜索“c++ tree draw”。

于 2013-10-21T19:04:02.167 回答
-1

说明问题的另一种方式是:如何确定层次有向图中的节点布局,使得没有重叠并且同一层次中的节点放置在同一级别?(这里的节点对应于家庭成员,而代指定了层次结构)。

虽然 GraphVis 可以提供布局解决方案,但比GraphVis 中使用的算法更新的方法是Dwyer 等人描述的 Dig-CoLa(通过约束能量最小化的有向图布局)方法。2005 年。Dig-Cola 的优势在于它还可以优雅地处理某些极端情况(例如循环),并避免在这种情况下引入不是由原始数据引起的层次结构。

该方法的基本思想是将布局问题制定和解决为一个约束优化问题,通过在层次信息引起的约束下基于节点位置最小化应力(或能量)函数。

原始 Dig-Cola 纸了解更多信息:

德怀尔、蒂姆和耶胡达·科伦。“Dig-CoLa:通过约束能量最小化的有向图布局。” IEEE 信息可视化研讨会,2005。INFOVIS 2005.. IEEE,2005。(目前可在此处获得全文)

作者还在此处提供了此方法(以及以后的扩展)的一些示例和代码

于 2016-08-20T22:53:13.897 回答