Pregunta

Tengo un punto (Lat / Lon) y un encabezado en grados (norte verdadero) por el que viaja este punto. Tengo numerosos polígonos estacionarios (puntos definidos en Lat / Lon) que pueden o no ser convexos.

Mi pregunta es, ¿cómo calculo el punto de intersección más cercano, si lo hay, con un polígono? He visto varias publicaciones confusas sobre el trazado de rayos, pero parece que todas se relacionan con 3D cuando el Rayo y el Polígono no están en el mismo Plano y también los Polígonos deben ser convexos.

¿Fue útil?

Solución 4

La respuesta en esta página parece ser la más precisa.

Pregunta 1.E GodeGuru

Otros consejos

parece que debería poder hacer una simple intersección de línea 2D ...

Sin embargo, he trabajado con Lat / Long antes y sé que no son exactamente fieles a ningún sistema de coordenadas 2D.

Comenzaría con un general '' IsPointInPolygon '' función, puede encontrar un millón de ellos buscando en Google, y luego probarlo en sus poli para ver qué tan bien funciona. Si son lo suficientemente precisos, solo úselos. Pero es posible que debido a la naturaleza no cuadrada de las coordenadas lat / long, tenga que hacer algunas modificaciones utilizando geometría esférica.

En 2D, los cálculos son bastante simples ...

Siempre puede comenzar verificando para asegurarse de que el punto final del rayo no esté dentro del polígono (ya que ese es el punto de intersección en ese caso).

Si el punto final está fuera de la línea, puede hacer una intersección de segmento de rayo / línea con cada una de las características de límite del polígono y usar la ubicación encontrada más cercana. Que maneja características convexas / cóncavas, etc.

Calcule si el rayo interseca cada segmento de línea en el polígono utilizando esta técnica .

El factor de escala resultante en (mi respuesta aceptada) (que llamé h ) es "Qué tan lejos a lo largo del rayo está la intersección". Está buscando un valor entre 0 y 1 .

Si hay múltiples puntos de intersección, ¡está bien! Si quiere el "primero", use el que tenga el valor más pequeño de h .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top