Ponto de interseção de Ray-Polgon na superfície de uma esfera
-
06-07-2019 - |
Pergunta
Eu tenho um ponto (Lat/Lon) e um título em graus (Norte Verdadeiro) para o qual esse ponto está viajando. Eu tenho numerosos polígonos estacionários (pontos definidos em LAT/LON) que podem ou não ser convexos.
Minha pergunta é: como calcular o ponto de interseção mais próximo, se houver, com um polígono. Eu já vi vários posts confusos sobre rastreamento de raios, mas eles parecem todos relacionados a 3D quando o raio e o polígono não estão no mesmo plano e também os polígonos devem ser convexos.
Solução 4
A resposta nesta página parece ser a mais precisa.
Outras dicas
Parece que você deve ser capaz de fazer um cruzamento simples de linha 2D ...
No entanto, eu já trabalhei com LAT/muito antes e sei que eles não são exatamente fiéis a nenhum sistema de coordenadas 2D.
Eu começaria com uma função geral "ISPointInpolygon", você pode encontrar um milhão deles pesquisando no Google e depois testá -lo em seus poli para ver como ele funciona bem. Se eles forem precisos o suficiente, basta usar isso. Mas é possível que, devido à natureza não quadrada das coordenadas LAT/longas, talvez você precise fazer algumas modificações usando geometria esférica.
Em 2d, os cálculos são bastante simples ...
Você sempre pode começar verificando para garantir que o terminal do raio não esteja dentro do polígono (já que esse é o ponto de interseção nesse caso).
Se o terminal estiver fora da linha, você poderá fazer um cruzamento de segmento de raio/linha com cada um dos recursos de limite do polígono e usar o local mais próximo encontrado. Que lida com recursos convexos/côncavos, etc.
Calcule se o raio cruza cada segmento de linha no polígono usando esta técnica.
O fator de escala resultante na resposta (minha aceita) (que eu liguei h
) é "quão longe o raio é a interseção". Você está procurando um valor entre 0
e 1
.
Se houver vários pontos de interseção, tudo bem! Se você quiser o "primeiro", use aquele com o menor valor de h
.