5

私はプロジェクト SFML/C++ に取り組んでいます。経路探索を容易にするためにそれらの間の障害物を接続するグラフを生成する必要があるため、ブースト A* アルゴリズムを適用するナビゲーション メッシュの生成に興味があります。このような少し: ナビメッシュ

しかし、これをBoost Graph Libraryで実装するには多くの問題があります(より適切なライブラリを考えているなら、私は興味があります)。まず、適切な構造を持つ adjacency_list を作成します。

struct WayPoint{
    sf::Vector2f pos;
};

struct WayPointConnection{
    float dist;
};

typedef boost::adjacency_list<
    boost::listS,
    boost::vecS,
    boost::undirectedS,
    WayPoint,
    WayPointConnection
    > WayPointGraph;

typedef WayPointGraph::vertex_descriptor WayPointID;
typedef WayPointGraph::edge_descriptor   WayPointConnectionID;

次に、グラフを作成し、それに障害物の頂点を追加します (現時点では単純な長方形です)。

while (i != rectangle.getPointCount()) {
    sf::Vector2f pt1 (sf::Vector2f(rectangle.getPoint(i).x + mouseEvent.x, rectangle.getPoint(i).y + mouseEvent.y));
    WayPointID wpID = boost::add_vertex(graph); 
    graph[wpID].pos = pt1; 
    i++;
}

複雑になってきました。すべての頂点をブラウズし、これらの頂点の隣接するアークを作成する必要があります。アークが障害物に入らないようにする必要があります...コードを作成する方法がわかりませんこれをBoostで、私はこれをコーディングし始めました:

boost::graph_traits<WayPointGraph>::vertex_iterator vi, vi_end, next;
boost::tie(vi, vi_end) = vertices(graph);
for (next = vi; vi != vi_end; vi = next) {
    //I need to create the good arcs ...
    ++next;
}

前もって感謝します。

4

1 に答える 1