Estou interessado na complexidade de decidir se um determinado polígono não simples é quase simples, em um dos dois sentidos formais diferentes: fracamente simples ou não-auto-atravessante . Como esses termos não são amplamente conhecidos, deixe-me começar com algumas definições.
Um polígono é simples se todos os vértices forem distintos e as arestas se cruzarem apenas em seus pontos finais. Equivalentemente, um polígono é simples se for homeomórfico a um círculo e cada aresta tiver comprimento positivo. Em geral, no entanto, os vértices e as arestas de um polígono podem se cruzar arbitrariamente ou mesmo coincidir. 1
Considere dois caminhos poligonais e cuja interseção é um subcaminho comum de ambos (possivelmente um único ponto). Dizemos que e cruz se seus endpoints alternativo no limite de um bairro do comum subpath . Um polígono é auto-cruzamento se tiver dois subcaminhos de passagem e não-auto-cruzamento caso contrário. 2B A B A ∩ B
Um polígono é fracamente simples se for o limite de uma sequência de polígonos simples ou, equivalentemente, se houver uma perturbação arbitrariamente pequena dos vértices que torna o polígono simples. Todo polígono fracamente simples é sem auto-cruzamento; no entanto, alguns polígonos sem auto-cruzamento não são fracamente simples.
Por exemplo, considere os seis pontos mostrados abaixo.
O polígono é simples; veja a figura da esquerda.
O polígono é fracamente simples; a figura do meio mostra um polígono simples próximo. No entanto, esse polígono não é simples, porque ele visita três vezes.p
O polígono é de cruzamento automático, porque os subcaminhos e cruzam. Veja a figura certa para alguma intuição.b p q z y q p a
Finalmente, o polígono (que serpenteia duas vezes ao redor do polígono meio) é não-auto-cruzamento, mas é não simples fracamente. Intuitivamente, o número de giro deste polígono é , enquanto o número de giro de qualquer polígono simples deve ser . (Uma prova formal requer alguma análise de caso, em parte porque o número de virada não é realmente bem definido para polígonos com !)± 2 ± 1 0 ∘
Update (setembro 13): Na figura abaixo, o polígono é não-auto-cruzamento e tem transformando número 1 , mas não é simples fracamente. O polígono tem indiscutivelmente várias sub- passagens não simples , mas não possui sub-caminhos simples . (Eu digo "indiscutivelmente" porque não está claro como definir quando dois passeios não simples se cruzam!)
Então, finalmente, aqui estão minhas perguntas reais:
Com que rapidez podemos determinar se um determinado polígono é sem auto-cruzamento?
Com que rapidez podemos determinar se um determinado polígono é fracamente simples?
O primeiro problema pode ser resolvido no tempo seguinte maneira. Como existem n vértices, existem O ( n 2 ) subcaminhos de vértice para vértice; podemos testar se algum subcaminho em particular é simples no tempo O ( n 2 ) (por força bruta). Para cada par de subcaminhos simples de vértice para vértice, podemos testar se eles se cruzam no tempo O ( n ) . Mas esse não pode ser o melhor algoritmo possível.
Não sei se o segundo problema pode ser resolvido em tempo polinomial. Eu acho que posso calcular rapidamente um número de virada bem definido para qualquer polígono não simples (a menos que a união das arestas do polígono seja apenas um caminho, nesse caso, o polígono deve ser fracamente simples); veja minha resposta abaixo. No entanto, o novo exemplo de polígono acima implica que o número 1 que não se cruza e gira automaticamente não implica uma fraqueza simples.
Podemos determinar se um determinado polígono é simples no tempo verificando cada par de arestas para interseção, ou no tempo O ( n log n ) usando um algoritmo de varredura padrão, ou mesmo no tempo O ( n ) usando o método de Chazelle algoritmo de triangulação. (Se o polígono de entrada não for simples, qualquer algoritmo de triangulação lançará uma exceção, um loop infinito ou produzirá uma saída que não é uma triangulação válida.) Mas nenhum desses algoritmos resolve os problemas que estou perguntando.
1 Branko Grünbaum. Polígonos: Meister estava certo e Poinsot estava errado, mas prevaleceu . Beiträge zur Algebra und Geometrie 53 (1): 57–71, 2012.
2 Ver, por exemplo: Erik D. Demaine e Joseph O'Rourke. Algoritmos de dobramento geométrico: ligações, origami, poliedros . Cambridge University Press, 2007.