2012-04-16 19 views
5

Có thuật toán tìm đường dẫn cũng phù hợp với môi trường 3D thực, ví dụ: Các tòa nhà thực với nhiều bậc thang vv Một thư viện C++ hoặc việc thực hiện mở sẽ là tuyệt vời ;-) Một giải pháp mà tôi thấy là Djikstra nhưng tôi tự hỏi liệu có cái gì đó tối ưu hơn không. Bình thường A * sẽ không hoạt động tốt hơn sau đó Djikstra kể từ khi heuristic khoảng cách không hoạt động tốt (Vị trí một tầng trên đích). Một giải pháp khác mà tôi đang cân nhắc là bản đồ của môi trường 3D trên biểu đồ 2d. Vì vậy, nếu có một số C++ thực hiện/thư viện có sẵn đi theo cách này nó sẽ là hữu ích quá.Đường dẫn trong môi trường 3D thực (ví dụ: Toà nhà)

+1

Trừ khi bạn có nhiều cầu thang, A * có thể hoạt động thực sự tốt, với điểm nhấn của bạn ở các cấp độ khác nhau là tổng khoảng cách đến cầu thang gần nhất cộng với khoảng cách thẳng đứng. – biziclop

+0

@biziclop: Đó là một ý tưởng rất hay và đơn giản hơn nhiều so với bất kỳ chuyển đổi đồ thị nào. Tôi sẽ thử nó – Martin

+1

Tôi tin rằng pathfinding là dễ bị phân chia và chinh phục. Vì vậy, bạn có thể thử sử dụng A * trên các cấp 2d và thuật toán của Dijkstra buộc chúng lại với nhau. – comingstorm

Trả lời

2

Nếu đường dẫn phải tính đến khả năng điều hướng qua các chướng ngại vật (nghĩa là chuyển động của một thực thể có khối lượng đã biết), thì tôi khuyên bạn nên xem xét tài liệu về lập kế hoạch chuyển động robot. Khái niệm về không gian cấu hình cho phép bạn xử lý các thay đổi trong tư thế để đối phó với các chướng ngại vật. Xem các sách giáo khoa kinh điển của Jean-Claude Latombe

Đối với kịch bản đơn giản hơn, bạn có lẽ có thể làm gì với thuật toán qui hoạch con đường sử dụng trong các trò chơi máy tính người đầu tiên, đó là tương tự như Dijkstra, A * (example)

1

Đối với một thuật toán xấp xỉ bạn có thể dễ dàng lập bản đồ đường cong 3D theo đường cong 1d và đi qua một quãng tám với mã màu xám. Bằng cách đó bạn có thể sắp xếp lại từng đường dẫn. Tôi không biết nếu có một sự bảo đảm để được trong các giải pháp tối ưu nhưng nó phải được tốt hơn sau đó bất kỳ phương pháp heuristic.

+0

Nghe có vẻ thú vị nhưng tôi không hoàn toàn hiểu ý tưởng của bạn. Đối với mọi con đường, nguồn gốc rõ ràng là khác nhau. Vì vậy, bạn có đề xuất xây dựng một octree đầu tiên cho mỗi lần chạy hay làm cách nào để xây dựng một tiêu chí phân loại cho cây? (Tôi phải thừa nhận tôi không quen thuộc với octrees ...) – Martin

+0

Hơn nữa vì tôi không có nút cho mọi hướng (tưởng tượng một hành lang chỉ với vài nút) cây sẽ phần lớn thưa thớt là điều này hợp lý cho octrees – Martin