gpt4 book ai didi

c++ - 如何访问 boost 图拓扑布局中的坐标?

转载 作者:搜寻专家 更新时间:2023-10-31 02:15:07 25 4
gpt4 key购买 nike

我正在尝试创建一个显示简单图形的应用程序,并且由于我将 boost::graph 用于底层数据结构,所以我也想使用库中提供的布局算法。

这里给出的答案解释了如何使用 boost 库中的布局算法来布局图形的顶点: How does the attractive force of Fruchterman Reingold work with Boost Graph Library

但遗憾的是,它没有解释在计算布局之后如何实际访问顶点的坐标。即使我们得到一个位置 vector (或者更确切地说是点), float 组件是私有(private)的,所以这无济于事。 boost::graph 文档也没有解决这个主题。

那么如何在应用布局算法后检索每个顶点的简单 (X,Y) 坐标?

最佳答案

在查看了 boost graph 源代码后,发现这毕竟不是那么难。我们可以使用属性映射遍历 PositionsMap 和 [] 运算符来访问坐标:

template<typename Graph, typename Positions>
void print_positions(const Graph &g, const Positions &positions) {
auto index_map = boost::get(boost::vertex_index, graph);

using PropertyMap = boost::iterator_property_map<Positions::iterator, decltype(index_map)>;
PropertyMap position_map(positions.begin(), index_map);
BGL_FORALL_VERTICES(v, graph, Graph) {
Position pos = position_map[v];
cout << v << ": " << pos[0] << "|" << pos[1] << endl;
}
}

关于c++ - 如何访问 boost 图拓扑布局中的坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39057826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com