2012-07-01 9 views
6

Estoy trabajando en un algoritmo de pathfinding basado en Theta *, una variante de A * que proporciona un buen sistema para pathfinding que no está restringido a una cuadrícula, aunque el terreno/obstrucciones se basan en un patrón de cuadrícula. Este sistema requiere un algoritmo de línea de visión para determinar si una ruta en particular está obstruida o no.¿Cómo puedo modificar este algoritmo de línea de vista para aceptar los rayos que pasan por las esquinas?

Encontré this algoritmo de línea de visión extremadamente útil, y lo he implementado con éxito en mi código. Por desgracia, se considera que los siguientes son una ruta no válida:

grid

Sin embargo, para mis propósitos, quiero un camino así se considere válida. Intenté modificar el algoritmo detectando si un punto está en la línea usando la fórmula básica y = mx + b, pero las inconsistencias del algoritmo me impiden confiar en dicho sistema.

¿Hay alguna manera eficiente de modificar este algoritmo para permitir tal ruta? ¿Hay algún otro algoritmo que funcione mejor? Tenga en cuenta que los puntos de inicio y fin de la ruta serán no necesariamente confinados a una cuadrícula, por lo que todos los puntos utilizan la precisión double.

Respuesta

4

el código que hace referencia realmente omite manejar explícitamente el caso en el que la línea pasa por un punto de la cuadrícula (donde se tocan cuatro cuadrados). Debe verificar error == 0.

En este caso, como máximo, uno de los cuatro cuadrados que tocan el punto de la cuadrícula puede estar bloqueado para seguir teniendo una ruta válida.

Saludos, Erich

+0

bien, fresco, que funciona. ¿Pero podrías indicarme exactamente por qué? Yo * más o menos * lo entiendo, pero no lo hago del todo. –

+0

1. 'error == 0' significa que su LOS está golpeando un punto de la grilla –

+0

Correcto, entiendo eso, pero ¿podría explicarme más sobre qué hace el valor del' error' en general? –

Cuestiones relacionadas