Rilevamento di due tipi di poligoni quasi semplici


22

Sono interessato alla complessità di decidere se un determinato poligono non semplice è quasi semplice, in uno dei due diversi sensi formali: debolmente semplice o non auto-attraversante . Dato che questi termini non sono ampiamente conosciuti, vorrei iniziare con alcune definizioni.

  • Pp0,p1,p2,,pn1pipipi+1modn

  • Un poligono è semplice se tutti gli vertici sono distinti e gli spigoli si intersecano solo ai loro punti finali. Equivalentemente, un poligono è semplice se è omeomorfo a un cerchio e ogni bordo ha una lunghezza positiva. In generale, tuttavia, i vertici e gli spigoli di un poligono possono intersecarsi arbitrariamente o addirittura coincidere. 1n

  • Considera due percorsi poligonali e cui intersezione è un sottotraccia comune di entrambi (possibilmente un singolo punto). Noi diciamo che e croce se i loro punti finali si alternano sul confine di un quartiere del comune sottotracciato . Un poligono è auto-attraversante se ha due sottotracciati incrociati e non auto-attraversante altrimenti. 2ABAB A(0),B(0),A(1),B(1)AB

  • Un poligono è debolmente semplice se è il limite di una sequenza di poligoni semplici, o equivalentemente, se c'è una perturbazione arbitrariamente piccola dei vertici che rende semplice il poligono. Ogni poligono debolmente semplice non è auto-attraversante; tuttavia, alcuni poligoni non auto-attraversanti non sono debolmente semplici.

Ad esempio, considera i sei punti mostrati di seguito.a,b,p,q,x,y

inserisci qui la descrizione dell'immagine

  • Il poligono è semplice; vedi la figura a sinistra.abpqyz

  • Il poligono è debolmente semplice; la figura centrale mostra un semplice poligono vicino. Tuttavia, questo poligono non è semplice, perché visita tre volte.papbpqyqzqp

  • Il poligono è auto-attraversante, perché i sottotracciati e incrociano. Vedi la figura giusta per un po 'di intuizione.b p q z y q p apapbpqzqyqbpqzyqpa

  • Infine, il poligono (che avvolge due volte intorno al poligono centrale) è non-self-crossing, ma è non semplice debolmente. Intuitivamente, il numero di svolta di questo poligono è , mentre il numero di svolta di qualsiasi poligono semplice deve essere . (Una dimostrazione formale richiede un'analisi del caso, in parte perché il numero di svolta non è in realtà ben definito per i poligoni con angoli !)± 2 ± 1 0 papbpqyqzqpapbpqyqzq±2±10

Aggiornamento (13 settembre): Nella figura seguente, il poligono non è auto-attraversante e ha la svolta numero 1 , ma non è debolmente semplice. Il poligono ha probabilmente diversi passaggi secondari non semplici che attraversano , ma non ha percorsi secondari semplici che attraversano . (Dico "discutibilmente" perché non è chiaro come definire quando si incrociano due passeggiate non semplici!)abcabcxyzxpqrxzyx

inserisci qui la descrizione dell'immagine

Quindi, finalmente, ecco le mie domande reali:

  • Con quale rapidità possiamo determinare se un determinato poligono non è auto-attraversante?

  • Quanto velocemente possiamo determinare se un determinato poligono è debolmente semplice?

Il primo problema può essere risolto in tempo come segue. Poiché ci sono vertici, ci sono sottopercorsi vertice a vertice; possiamo verificare se un particolare sottotracciato è semplice in tempo (con forza bruta). Per ogni coppia di semplici sottotracciati da vertice a vertice, possiamo verificare se si incrociano nel tempo . Ma questo non può essere il miglior algoritmo possibile.nO(n5)nO(n2)O(n2)O(n)

Non so se il secondo problema possa essere risolto in tempi polinomiali. Penso di poter calcolare rapidamente un numero di svolta ben definito per qualsiasi poligono non semplice (a meno che l'unione dei bordi del poligono non sia solo un percorso, nel qual caso il poligono deve essere debolmente semplice); vedi la mia risposta qui sotto. Tuttavia, il nuovo poligono di esempio sopra riportato implica che il non attraversamento automatico e la rotazione del numero 1 non implica debolmente semplice.

Possiamo determinare se un dato poligono è semplice in tempo il controllo di ciascuna coppia di bordi di intersezione, o tempo utilizzando un algoritmo sweepline normale, o anche in tempo usando l'algoritmo di triangolazione di Chazelle. (Se il poligono di input non è semplice, qualsiasi algoritmo di triangolazione genererà un'eccezione, un ciclo infinito o produrrà un output che non è una triangolazione valida.) Ma nessuno di questi algoritmi risolve i problemi di cui mi sto chiedendo. O ( n registro n ) O ( n )O(n2)O(nlogn)O(n)


1 Branko Grünbaum. Poligoni: Meister aveva ragione e Poinsot aveva torto ma ha prevalso . Beiträge zur Algebra und Geometrie 53 (1): 57–71, 2012.

2 Vedi, ad esempio: Erik D. Demaine e Joseph O'Rourke. Algoritmi pieghevoli geometrici: collegamenti, origami, poliedri . Cambridge University Press, 2007.


Non capisco perché si dovrebbe votare in basso questa domanda ?!
Kaveh,

Potrei fraintendere totalmente la domanda, e quindi forse questo è molto lontano, ma mi sembrerebbe che il modo in cui conti i vertici significhi che la seconda domanda richiede necessariamente tempo esponenziale. Lasciami spiegare: nel tuo ultimo esempio usi gli stessi vertici più volte. Sembra facile costruire grafici in cui esiste un numero esponenziale di cicli univoci.
Joe Fitzsimons,

Se il tuo input è il poligono dato come nei tuoi esempi, allora è possibile che l'input sia esponenziale nel numero di vertici senza mai ripetere un ciclo. Se il grafico contiene il grafico di esempio (2 e 3) come un sottografo, allora ha cicli che non si incrociano e cicli che si incrociano. Di conseguenza, è necessario leggere l'intera stringa per assicurarsi di non avere cicli di attraversamento (che potrebbero essere stati inclusi o meno). Questo richiede tempo esponenziale in nel caso peggiore. n
Joe Fitzsimons,

1
@JoeFitzsimons: l'input è solo una sequenza di punti (cioè coppie di numeri reali), che non devono essere distinti. La dimensione di input è la lunghezza di questa sequenza, non il numero di punti univoci. n
Jeffε,

2
@Kaveh: forse troppo astratto / specializzato? Troppe parole? Avrei dovuto nominare i punti Ga, Ka, Naa, Taa, Tin, Khat ?
Jeffε,

Risposte:


2

Sembra che la prima domanda abbia un algoritmo (anche se probabilmente non è ottimale). Supponendo che ci sia un incrocio, la chiave per trovarlo sembra essere che i bordi che devono essere trovati sono quelli immediatamente su entrambi i lati del sottotraccia comune. Pertanto, esaminiamo tutte le coppie di coppie consecutive di bordi. Esistono un numero quadratico di questi. Se troviamo una coppia di coppie di bordi con vertici a b c e d e f tali che i bordi b c ed e f sono gli stessi, seguiamo il sottotraccia comune fino alla fine e ispezioniamo i bordi che lo lasciano. Se formano un incrocio conO(n3)abcdefbcef e d e , allora abbiamo finito, altrimenti andiamo avanti alla coppia successiva. Seguire il sottotraccia comune è al massimo un'operazione a tempo lineare, quindi l'intero algoritmo è O ( n 3 ) .abdeO(n3)

Questa analisi probabilmente non è precisa poiché il numero di volte in cui verrà seguito un sottotraccia comune di lunghezza lineare non è lineare nel numero di coppie di coppie. Dovrebbe esserci solo un numero costante di quelli. Allo stesso modo, se la lunghezza del sottotraccia comune più lungo è costante, allora andiamo bene in termini di tempo seguendo i sottotracciati comuni. Mi aspetterei che il caso peggiore si presenti quando esiste un singolo sottotraccia di lunghezza che è comune aO(O(n)percorsi secondari. Quindi ci sonointerazioniO(n)e in ogni interazioneO(O(n)O(n)vengono seguiti i bordi. Quindi, anche in questo caso, il numero di spigoli che seguono èo(n2)e il limite è fornito dal numero di coppie. Quindi immagino che il vero limite per questo algoritmo siaO(n2).O(n)o(n2)O(n2)


1
"Seguire il sottotraccia comune è al massimo un'operazione a tempo lineare ..." È vero? Ricorda che i sottotracciati non sono identici. Uno può essere ripiegato avanti e indietro lungo l'immagine dell'altro. In effetti, non è nemmeno chiaro (per me) quando sai di aver finito.
Pat Morin,

Buon punto. Sarebbe possibile, come fase di preelaborazione, mettere il poligono in una forma standard? Eviteremmo percorsi che si ripiegano immediatamente su se stessi, così come vertici che sono collineari con i loro vicini immediati. Quindi la frase che hai citato sarebbe meglio definita: il sottotraccia comune è costituito da bordi che hanno gli stessi vertici e sai che hai finito perché colpisci vertici diversi. Dimostrare che la risposta rimane la stessa nel poligono in forma standard non dovrebbe essere troppo difficile.
Chris Gray,

@ChrisGray: Forse, ma non così facilmente come hai suggerito. Se l'immagine di è un albero, l'eliminazione ricorsiva di tutti i passaggi alla fine riduce P a un singolo punto. PP
Jeffε

Sì, hai ragione, quell'idea non funzionerà. La cifra più a destra che hai dato sopra sarebbe ridotta a un singolo punto.
Chris Gray,

Ho in programma di far scadere la taglia; metà dei punti verrà automaticamente assegnata a questa risposta.
Jeffε

2

Su suggerimento di Pat Morin, ecco la mia idea per calcolare il numero di svolta. Scusate se questo è un po 'sciatto; Sto ancora combattendo contro i demoni della notazione. Inoltre, il commento di Pat alla risposta di Chris rivela che ho ignorato alcuni importanti casi degenerati. Ma lo posterò qui nel caso in cui altri lo trovino utile.

Per ogni indice , θ ( p i ) = θ ( p i - 1 , p i , p i + 1 ) denota l' angolo esterno con segno al vertice p i ; questo è l'angolo in senso antiorario tra i raggi p i - 1 p i e p i p i + 1 , normalizzato nell'intervallo - π θ iiθ(pi)=θ(pi1,pi,pi+1)pipi1pipipi+1 . (Tutta l'aritmetica dell'indice è implicitamente mod n .) Il numero di svolta di P è definito come T u r n ( P ) = 1πθiπnP Fammi chiamare un verticepiounosperonese l'internoangolo alpiè uguale a0. L'angolo esternoθiin uno sperone non è ben definito; potrebbe essereπo-π. Più in generale, il numero di svolta diPè ben definito se e solo sePnon ha speroni (e non ha vertici ripetutipi=

Turn(P)=12πi=0n1θ(pi).
pipi0θiππPP ). Non è difficile dimostrare che T u r n ( P ) è un numero intero se è ben definito; in particolare, T u r n ( P ) = ± 1 se P è un poligono semplice.pi=pi+1Turn(P)Turn(P)=±1P

Supponiamo ora che contenga una camminata della forma p r s r q , dove p q e il percorso r s è l'inversione del percorso s r . Quindi s è uno sperone; chiama r la radice di s . In questo caso, consentitemi di definire l'angolo esterno su s come segue: ˜ θ ( s ) = π s g nPprsrqpqrssrsrss (Ma cosa succede se θ ( p , r , q ) = 0 ? Come osserva Pat, questo può effettivamente accadere, probabilmente c'è una sorta di modo ricorsivo per definire ˜ θ ( s )

θ~(s)=πsgnθ(p,r,q)={πif θ(p,r,q)>0πif θ(p,r,q)<0
θ(p,r,q)=0θ~(s) anche in questo caso, ma non so cosa sia.)

Se è debolmente semplice, allora c'è un semplice n -gon ˜ P arbitrariamente vicino a P ; tet ~ s essere il vertice ~ P vicini a P . Quando ˜ P si avvicina a P , l'angolo interno in corrispondenza di ˜ s si avvicina a zero. Non è difficile provare (per induzione sulla lunghezza di r s ) che l'angolo esterno θ ( ˜ s ) si avvicina a ˜ θ ( s ) .PnP~Ps~P~PP~Ps~rsθ(s~)θ~(s)

Se consiste interamente di una camminata seguita dalla sua inversione, r s r , allora gli angoli esterni agli speroni r e s non sono ancora ben definiti. Ma in questo caso, credo che P è semplice debolmente se e solo se la passeggiata r s è non-auto-crossing. (Ci sono casi più complessi in cui non riesco a definire un numero di svolta modificato ragionevole, in particolare se il poligono vaga avanti e indietro attraverso una sola camminata. Ma in tutti questi casi, sembra che il poligono sia debolmente semplice se e solo se è non auto-attraversante.)PrsrrsPrs

Altrimenti, se definiamo per qualsiasi vertice non speronato p i , ora abbiamo un numero di svolta ben definito ~ T u r n ( P ) = i ˜ θ ( p i ) / 2 π = T u r n ( ˜ P ) , che deve essere ± 1 se P è debolmente semplice.θ~(pi)=θ(pi)piTurn~(P)=iθ~(pi)/2π=Turn(P~)±1P

Non sono più sicuro che possa essere calcolato in tempo lineare. La difficoltà principale è che la passeggiata r s possono contenere in sé speroni. L'algoritmo ingenuo che trova la radice di ogni sperone con la forza bruta richiede in realtà Θ ( n 2 ) tempo nel caso peggiore; considera un n -gon che ha un sottopassaggio di lunghezza Ω ( n ) che si alterna semplicemente tra due punti.Turn~(P)rsΘ(n2)nΩ(n)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.