【问题标题】:How to compute the visual data of a graph?如何计算图形的可视化数据?
【发布时间】:2013-10-30 10:00:45
【问题描述】:

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

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

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

【问题讨论】:

  • 每当我使用 C++ 工作时,我总是尝试看看 Qt 是否有我可以使用的东西。那个图书馆对我非常非常有帮助。他们有一个很好的 2D 图形库,可以帮助你。看起来 Qt 5 的某些功能是 3D 的,但我并不肯定。

标签: c++ graph visualization


【解决方案1】:

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

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

【讨论】:

  • 这是我在 Python 中有大量节点和边时默认使用的 - 我还没有尝试过 C++ 绑定。
【解决方案2】:

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

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

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

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

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

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

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
  • 好的,我编辑了答案以添加参考论文中的详细信息。
猜你喜欢
  • 2012-12-13
  • 2023-03-25
  • 2015-07-08
  • 2014-03-13
  • 2013-01-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 2016-03-24
相关资源
最近更新 更多