locked
Algoritmo A* en ambiente 3D RRS feed

  • Pregunta

  • Hola, resulta que hace un tiempo tuve que crear un programa que me encontrara el camino más corto en un laberinto en 2D, por lo que utilize el algoritmo A* sin ningún problema.  Ahora, sin embargo, debo hacer lo siguiente:

     

    Tengo un Cubo de 100x100x100 con un flujo cualquiera (i.e. viento) en una dirección indicada por un vector con una velocidad dada.  Además. dentro del cubo existen otros cubos más pequeños que cumplen el rol de obstáculos.  La idea es partir desde el punto (0,0,0) y llegar al punto (100,100,100) lo más rápido posible utilizando el flujo (más rápido no más corto).  Por ejemplo:

    Cubo Principal (100x100x100)

    Obstaculo 1: Cubo que va de (40,40,40) a (60,60,60) (es decir un cubo de 20x20x20 con el vertice frontal inferior izquierda en (40,40,40) y el vertice trasero superior derecho en (60,60,60)

    Flujo con direccion (1,1,1) con velocidad 2 (unidad arbitraria, i.e. [m/s])

    Si me muevo en la misma dirección del flujo tengo velocidad 2 (en este caso 2 metros por segundo).  Ahora si me muevo con una dirección distinta a la del flujo mi velocidad será:

     

    Velocidad resultante = v x (V·F) / (|V||F|)

    Donde v = velocidad (2 en este caso), V es vector dirección con que me muevo, F es el vector dirección del flujo, V·F es el producto punto entre los dos vectores y |V|, |F| son los módulos respectivos de los vectores.  Luego lo que tenemos es que la velocidad resultante es la velocidad del flujo por el coseno del angulo entre el vector del flujo y el vector dirección del movimiento.

    Partiendo desde (0,0,0) se puede mover a cualquier dirección dentro del cubo siempre y cuando no colisione con el cubo (i.e. movimiento con dirección (9,5,4)). obviamente cualquier dirección ortogonal al flujo es inválida para moverse (ya que reporta una velocidad 0 [cos(90) = 0]) y obviamnete no se puede ir en contra del flujo.  Por ahora estoy tratando de utilizar movimiento de una unidad en cualquier direccion partiendo desde el punto (0,0,0), pero no me está dando resultados.  Si pudieran indicarme algún tipo de documentación o ayuda estaré sumamente agradecido. 

     

    Gracias

    • Cambiado Javier Conesa viernes, 19 de agosto de 2011 7:51 El tema esta mejor ubicado en el foro de XNA (De:Lenguaje C#)
    viernes, 19 de agosto de 2011 4:16

Respuestas

Todas las respuestas