Estoy tratando de calcular qué fichas puede "ver" una unidad en particular si se enfrenta a una determinada dirección en un mapa de fichas (dentro de un cierto rango y ángulo de orientación). La forma más fácil sería dibujar un cierto número de fichas hacia afuera y emitir rayos a cada ficha. Sin embargo, espero algo un poco más eficiente. Una imagen dice más que mil palabras:
El punto rojo es la unidad (que está mirando hacia arriba). Mi objetivo es calcular las fichas amarillas. Los bloques verdes son paredes (las paredes están entre las fichas, y es fácil comprobar si puedes pasar entre dos fichas). La línea azul representa algo así como el método de "emisión de rayos" del que estaba hablando, pero prefiero no tener que hacer esto.
EDITAR: Las unidades solo pueden estar orientadas al norte / sur / este / oeste (0, 90, 180 o 270 grados) y el campo de visión siempre es de 90 grados. Debería simplificar algunos cálculos. Estoy pensando que hay algún tipo de algoritmo recursivo-ish / basado en pila / basado en cola, pero no puedo entenderlo.
¡Gracias!
Respuestas:
¡Sí, encontré un trabajo de investigación!
En términos de costo computacional, Shadow Mapping parece un ganador bastante claro.
El algoritmo utilizado se puede encontrar aquí y una implementación de C # se puede encontrar aquí , el bit relevante a continuación.
fuente