Teste elegante “à esquerda” para Polyline
Dado:
Coordenada (X, Y), que é a posição de um veículo.Matriz de (X, Y), que são vértices em uma polilinha. Observe que a polilinha consiste apenas em segmentos retos, sem arcos.O que eu quero:
Para calcular se o veículo está à esquerda ou à direita da polilinha (ou no topo, é claro).Minha abordagem:
Iterar em todos os segmentos de linha e calcular a distância de cada segmento. Então, para o segmento mais próximo, você faz um simples teste à esquerda (como explicadoAqui por exemplo).Possíveis problemas:
Quando três pontos formam um ângulo menor que 90 graus (como mostrado no sopro da imagem), surge um cenário mais complicado. Quando o veículo estiver no segmento vermelho, conforme mostrado abaixo, o segmento mais próximo pode ser um dos dois. No entanto, oà esquerda teste produzirácerto se o primeiro segmento for escolhido como o segmento mais próximo eesquerda de outra forma. Podemos ver facilmente (pelo menos, espero) que o resultado correto deve ser que o veículo éesquerda da polilinha.Minha pergunta:
Como possoelegantemente, mas principalmenteeficientemente cuidar dessa situação específica?Minha correção até agora:
Calcule para ambos os segmentos um ponto nesse segmento, começando do ponto de vértice.Calcule a distância do veículo para ambos os pontos, usando a distância euclidianaMantenha o segmento para o qual o ponto computado é o mais próximo.Eu não estou muito feliz com essa correção, porque eu sinto que estou perdendo uma solução muito mais elegante, minha correção parece bastante "hacky". A eficiência é fundamental, porque é usada em um sistema embarcado em tempo real.
A base de código existente está em C ++, portanto, se você quiser escrever em um idioma específico, o C ++ tem minha preferência. Obrigado!
[editar] eu mudeiminha correção, de um ponto perpendicular para um ponto paralelo, como eu acho que é mais fácil seguir o segmento de linha do que calcular o normal externo.