Dado um conjunto do pontos em uma esfera e outro ponto na esfera, eu quero encontrar o pontos em que são as mais próximas (distância euclidiana ou grande círculo).
Estou disposto a fazer uma quantidade razoável de pré-cálculo. A solução deve ser exata e eficiente (mais rápido que o tempo linear).
Respostas:
Use a abordagem de particionamento de espaço para procurar vizinhos mais próximos .
Por exemplo, uma abordagem é usar umk -d árvore na superfície da esfera. Você pode expressar todos os pontos da esfera usando coordenadas esféricas : cada ponto da esfera tem coordenadas(1,θ,ϕ) . Assim, temos um espaço bidimensional com coordenadas(θ,ϕ) . Agora organize seus pontos usando umk -d tree, onde estamos aqui k=2 dimensões. Existem algoritmos padrão para a pesquisa de vizinhos mais próximos em umk -d árvore; heuristicamente, o tempo de execução esperado éO(lgN) .
Você precisará fazer pequenas modificações na estrutura de dados para refletir que as coordenadas "envolvem" o módulo2π , mas isso não é difícil. A sub-rotina principal usada na pesquisa de vizinhos mais próximos em umk -d árvore é: dado um ponto P e uma região "retangular" R , encontre a distância de P para o ponto mais próximo R . No seu caso, a regiãoR é [θℓ,θu]×[ϕℓ,ϕu] , ou seja, o conjunto de pontos {(1,θ,ϕ):θℓ≤θ≤θu,ϕℓ≤ϕ≤ϕu} . É fácil calcular a distância entreP para o ponto mais próximo R . Isso permitirá que você use o algoritmo padrão para a pesquisa de vizinhos mais próximos em umk -d árvore.
Como alternativa, em vez de umk -d tree, você pode usar qualquer outra árvore de particionamento de espaço binário ou pode olhar para árvores métricas , embora eu não tenha nenhum motivo para esperar que elas sejam significativamente melhores.
fonte
Aqui estão os links para dois pacotes de software diferentes que abordam sua pergunta. Pode valer a pena estudar cada um para ver se os métodos que eles empregam atendem às suas necessidades:
(1) Matlab GridSphere . "Uma grade geodésica é uma grade uniforme sobre a superfície de uma esfera. O algoritmo é otimizado para uma grade gerada pelo GridSphere e não funciona em uma grade geodésica arbitrária".
(2) DarkSkyApp . "fornece pesquisas rápidas de vizinhos mais próximos em uma esfera ... bem testadas e funcionam corretamente, independentemente de onde as coisas estejam localizadas na terra."
fonte