Ich arbeite an einem Projekt SFML/C++, ich muss ein Diagramm erstellen, um die Hindernisse zwischen ihnen zu verbinden, um die Pfadfindung zu erleichtern, also bin ich daran interessiert, ein Navigationsnetz zu generieren, was ich werde Wenden Sie den Boost A * -Algorithmus an. Ein bisschen wie folgt aus: Boost Graph Bibliothek Astar und Navigation Mesh
Aber ich habe viele Probleme dies mit der Boost-Graph-Bibliothek Implementierung (wenn Sie eine Bibliothek im Auge haben, die besser geeignet wäre, die mich interessieren). Zuerst habe ich eine adjacency_list mit den entsprechenden Strukturen schaffen:
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;
Dann erstelle ich meine Graph und ich füge hinzu, um es die Eckpunkte meiner Hindernisse (die für den Moment einfach Rechtecke):
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++;
}
Es Jetzt, wo es kompliziert wird, muss ich durch alle meine Eckpunkte blättern und die Bögen zu den Nachbarn dieser Eckpunkte erstellen, in dem Wissen, dass die Bögen nicht in die Hindernisse gehen sollten ... Ich sehe nicht, wie ich das tun könnte Mit Boost habe ich begonnen, dies zu programmieren:
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;
}
Vielen Dank im Voraus.
Vielen Dank für Ihre Antwort, ich werde die Poly2tri-Lösung versuchen – thegrandwaazoo