Tôi đang làm việc trên dự án SFML/C++, tôi cần tạo biểu đồ để kết nối các chướng ngại vật giữa chúng để tạo điều kiện thuận lợi cho đường dẫn, vì vậy tôi quan tâm đến việc tạo lưới điều hướng áp dụng thuật toán tăng A *. Một chút giống như sau: Thư viện đồ thị Boost astar và lưới điều hướng
Nhưng tôi có nhiều vấn đề khi triển khai thư viện đồ thị tăng cường này (nếu bạn thích thư viện). Trước tiên tôi tạo ra một adjacency_list với các cấu trúc thích hợp:
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;
Sau đó, tôi có thể tạo biểu đồ của tôi và tôi thêm vào đó các đỉnh của chướng ngại vật của tôi (mà là hình chữ nhật đơn giản cho thời điểm này):
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++;
}
Nó bây giờ là nó trở nên phức tạp, tôi phải duyệt qua tất cả các đỉnh của tôi và tạo ra vòng cung cho những người hàng xóm của những đỉnh này, biết rằng các vòng cung không nên đi vào trong chướng ngại vật ... Tôi không thấy làm thế nào tôi có thể làm mã này với Boost, tôi bắt đầu viết mã này:
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;
}
Cảm ơn bạn trước.
Cảm ơn bạn đã trả lời, tôi sẽ thử giải pháp poly2tri – thegrandwaazoo