¿Hay algún algoritmo de ruta que sea adecuado también para entornos 3D reales, p. Edificios reales con múltiples escaleras, etc. Una biblioteca C++ o implementación abierta sería espléndida ;-) Una solución que vi fue Djikstra, pero me pregunto si hay algo más óptimo. Normal A * no funcionaría mejor que Djikstra ya que la heurística a distancia no funciona bien (posición de un piso por encima del destino). Otra solución que estoy considerando actualmente es la asignación del entorno 3D en un gráfico 2d. Entonces, si hay alguna implementación/biblioteca de C++ disponible yendo de esta manera, sería útil también.Búsqueda de ruta en entornos 3D reales (por ejemplo, Edificios)
Respuesta
Si la ruta tiene que tener en cuenta la capacidad de navegar a través de obstáculos (es decir, el movimiento es el de una entidad con volumen conocido en el espacio), recomendaría consultar la literatura sobre la planificación del movimiento del robot. La noción de un espacio de configuración le permite manejar los cambios en pose para poder enfrentar los obstáculos. Ver el libro de texto clásico de Jean-Claude Latombe
Para los escenarios más simples, es probable que pueda conformarse con algoritmos de planificación de ruta usados en primera persona juegos de ordenador, que son similares a Dijkstra, A * (example)
Para un algoritmo de aproximación puede mapear fácilmente el 3d a una curva 1d y atravesar un octárbol con un código gris. De esa forma puedes reordenar cada ruta. No sé si hay una garantía de estar dentro de la solución óptima, pero debe ser mejor que cualquier método heurístico.
Eso suena interesante pero no entiendo bien tu idea. Para cada camino, el origen es obviamente diferente. Entonces, ¿propone construir primero un octárbol para cada ciclo o cómo formulo un criterio de clasificación para el árbol? (Tengo que admitir que no estoy muy familiarizado con octrees ...) – Martin
Además, dado que no tengo nodos para todas las direcciones (imagino un pasillo con solo algunos nodos), el árbol sería muy escaso. Esto es sensato para octrees. – Martin
- 1. Fluidos estables en 3D Ejemplo
- 2. simetría 3D algoritmo de búsqueda
- 3. Búsqueda de ruta para juegos
- 4. dlopen() ruta de búsqueda
- 5. Ejemplo de un robot RoboCup 3D Soccer?
- 6. Ruta de búsqueda en ASP.NET MVC
- 7. búsqueda de nombre de ruta en Linux?
- 8. ASP.NET MVC ruta de búsqueda
- 9. Ejemplo de transparencia simple que no funciona en Java 3D
- 10. ¿Cómo comenzar a crear GUI en 3D (Juego) para aplicaciones de Android (por ejemplo, con OpenGL)?
- 11. Búsqueda de archivos en rutas de entorno variable "Ruta"
- 12. ¿Asigna personas a edificios respetando las preferencias?
- 13. Scala por ejemplo?
- 14. Gráficos 3D por lotes
- 15. Búsqueda eficiente de la ruta más corta en gráficos grandes
- 16. Ruta de búsqueda de algoritmo en un árbol no dirigido
- 17. Configurar la ruta a las imágenes en CSS para entornos de desarrollo y producción
- 18. ¿Cómo rastrear la ruta en una búsqueda de primer orden?
- 19. Ruta de búsqueda del complemento GStreamer?
- 20. Encontrar altura común de edificios con un costo mínimo
- 21. Android en entornos integrados industriales
- 22. entornos de etiquetado de automóviles en AUCTeX
- 23. Delphi Ruta de búsqueda vs Biblioteca Ruta vs Ruta de exploración
- 24. ¿Por qué IE10 no muestra elementos 3D 3D anidados transformados?
- 25. Evaluar expresiones en entornos en Rcpp
- 26. Zend_Mail y = 0D = 0A = 3D = 3D = 3D = 3D = 3D
- 27. Cómo utilizar la ruta de búsqueda de MATLAB
- 28. ¿Por qué Scheme no admite entornos de primera clase?
- 29. Búsqueda de ruta en un juego Java 2d?
- 30. Entornos personalizados de Grails?
A menos que tenga muchas escaleras, A * puede funcionar muy bien, con su heurística para puntos en diferentes niveles que es la suma de las distancias a las escaleras más cercanas más la distancia vertical. – biziclop
@biziclop: Es una muy buena idea y mucho más sencilla que cualquier transformación de gráfico. Lo intentaré – Martin
Creo que el pathfinding es susceptible de dividir y vencer. Entonces, puedes intentar usar A * en niveles 2d, y el algoritmo de Dijkstra para unirlos. – comingstorm