2012-04-16 3 views
1

Я понимаю, что это не связано с проблемами программирования, но поскольку SO - лучший ресурс для программирования связанных проблем, я решил попробовать его. :)Pathfinding: Как создать данные пути для алгоритма определения пути?

У меня есть проект, где мне нужно сделать 3D-поиск пути с помощью javascript внутри здания. Алгоритм Дейкстры, вероятно, лучший случай для этого, поскольку он отлично справляется с неправильными формами.

Однако проблема заключается в следующем: Для работы Dijkstra требуется структура узла. Но как создать эти данные? Очевидно, что какое-то преобразование нужно делать из базы данных, но как создать эту базу данных? Пройдя по чертежу, получив x & y значения для каждого возможного узла пути, вычисление расстояний вручную кажется немного избыточным ... И подвержено ошибкам ...

Я даже думал об использовании Google Scetchup для этого. Строки чертежа для каждого возможного пути, но тогда проблема заключается в получении данных пути от него. :/

Я не могу быть первым человеком, у которого есть эта проблема ... Любые идеи? Есть ли готовые инструменты для создания данных пути?

+0

Если у вас есть какая-то 3D-модель здания (как dwg), вы можете нарисовать пути в ней как полилинии, а затем сохранить эти полилинии в dxf-файле. dxf-файл содержит данные чертежа в текстовом формате, а вершины легко извлекаются. Для задачи вам понадобится AutoCAD или какое-либо другое приложение, которое считывает/записывает dwgs и dxfs. Я сделал что-то вроде этого лет назад, но, к сожалению, у меня больше нет кода JavaScript. – Teemu

ответ

0

Не удалось найти готовые инструменты, поэтому я создал данные о пути в виде строк в Google SketchUp, экспортировал их файлы Collada и написал собственный конвертер для данных Collada XML.

0

Все это можно сделать в коде путем построения 3d-сетки и удаления кубов, которые пересекаются с 3D-объектами.

Я бы затем накладывал несколько трехмерных сеток (каждый раз удваивал размер), что дает более общее представление о достижимости (построено из небольших сеток), то по чистой основе алгоритмов поиска пути вы всегда найдете наиболее эффективный путь от AB, который автоматически направит путь, используя самые большие ячейки (и, следовательно, наименьшее количество шагов калькуляции). Примечание: сделать большие 3D-решетки немного более легкими, чтобы его пути были благоприятными.

Это может использоваться для многих применений. Например, если вы можете ходить только по земле, просто удалите блоки в недоступных местах.

Смежные вопросы