我有一个包含许多假想人士信息的数据库。该数据用于创建将相关人员连接在一起的图表。该图用于表示适当的c ++数据结构中的谱系树。到现在为止还挺好。我的数据结构包含有关一个家庭的信息,每个人都是一个节点,所有人都在树中相应地连接。
现在,问题是,我对如何为此家庭图生成可视化数据感到迷茫。对于任何给定的家庭,我需要生成一个典型的图形,就像您在传统的谱系树中看到的那样。我打算用OpenGL渲染数据并设置所有内容以便执行此操作。我唯一的问题是如何为每个人的矩形生成正确的位置和大小,所以最后没有重叠,每一代人都坐在同一个垂直位置。然后,我必须添加连接可视数据中每个节点的传统线,但这不应该是一个大问题。
是否有任何轻量级库准备执行此功能或有人可以帮我实现算法来解决这个问题?感谢
答案 0 :(得分:1)
我推荐AT&T GraphVis库。 Doxygen使用该库绘制其继承图,并调用树。
您还可以搜索“c ++ tree draw”。
答案 1 :(得分:-1)
说明问题的另一种方法是:如何确定分层有向图中的节点布局,使得没有重叠,同一层次的节点放在同一级别? (此处节点对应于族成员,而生成指定层次结构)。
虽然GraphVis可以提供布局解决方案,但algorithms used in GraphVis中描述的新方法是Dwyer et al. 2005中描述的Dig-CoLa(通过约束能量最小化的有向图布局)方法。 Dig-Cola的优势在于它还可以优雅地处理某些角落情况(例如周期),并避免在这种情况下引入不由原始数据引起的层次结构。
这种方法的基本思想是通过根据约束下的节点位置最小化应力(或能量)函数来制定和解决布局问题作为约束优化问题由等级信息引起的。
原始Dig-Cola论文获取更多信息:
Dwyer,Tim和Yehuda Koren。 “Dig-CoLa:通过约束能量最小化来定向图形布局。” IEEE信息可视化研讨会,2005年.INFOVIS 2005 .. IEEE,2005。 (目前提供全文here)作者还提供了此方法的一些示例和代码(以及后来的扩展)here。