Poligono nel problema di generalizzazione del poligono


9

Vorrei scusarmi con tutti i post qui sotto. Ho scelto il forum sbagliato per pubblicarlo in origine. Tuttavia, anziché trasformarlo in uno spreco completo, ho rielaborato la domanda in modo che diventi un vero problema di "informatica teorica".

Problema: crea un algoritmo che prende un set di n punti ordinati in un piano 2D che forma il contorno di un semplice poligono A che può essere o meno concavo e crea un nuovo poligono B con punti m tali che:

  1. tutti i punti in A sono contenuti in B
  2. 3 <= m <n
  3. B è il poligono nell'insieme di tutti i B&B con l'area più piccola
  4. B deve essere un poligono semplice (cioè senza autointersezioni).
  5. L'input per l'algoritmo è il poligono A e "m".
  6. Sono consentite coincidenze di segmenti in B con segmenti in A.

Alcuni esempi di input e output previsti:

  1. Se A è un quadrato e m è 3, allora B sarebbe il triangolo con la superficie più piccola che contiene A.
  2. Se A è un esagono e m è 4, allora B sarebbe un quadrilatero con la superficie più piccola che contiene A.

Buona fortuna a tutti coloro che provano questo problema. Posso prometterti che questo sarà molto difficile, specialmente ora che la soluzione deve essere ottimale.


1
@Joe: Non è vero: se A è un quadrato, Thirian chiede il triangolo dell'area minima contenente A. D'altra parte, se A è un triangolo ( ), in effetti non esiste una soluzione valida. n=3
Jeffε

3
Aggiungi 17 al mio primo commento, immagino. Perché 20?
Jeffε

3
FFT non è una soglia bassa per "complicato"?
Sasho Nikolov,

2
Non credo sia del tutto vero che il problema non cambi affatto se (diciamo) imposti m = 3. Il problema è che potresti aver bisogno di tempo esponenziale in m, e va bene se m è fissato a un certo numero, ma non va bene se m fa parte dell'input.
Suresh Venkat,

5
"tutti sanno qual è il problema" non è vero. Lo stiamo chiedendo perché le scelte non specificate fanno la differenza.
Suresh Venkat,

Risposte:


10

Non so come siano i tuoi poligoni, ma forse è sufficiente una versione semplificata dell'algoritmo Ramer – Douglas – Peucker :

  • per ciascuna parte convessa , calcolare l'area dei triangoli P i P i + 1 P i + 2 formata da tre punti consecutivi;UNjPioPio+1Pio+2
  • per ogni parte concava , calcolare l'area dei due triangoli P i P i P i + 1 e P i + 1 P i + 2 P i + 2 formata dall'estensione dei due punti P i , P i + 2 e il punto medio P i + 1BKPioPio'Pio+1Pio+1Pio+2'Pio+2Pio,Pio+2Pio+1
  • calcola ed elimina il punto corrispondente (e sposta i punti se l'operazione viene eseguita sulla parte concava);mion{UNj,BK}
  • ciclo fino a quando punti sono stati eliminati.n-m

inserisci qui la descrizione dell'immagine
Il bordo del poligono ( triangoli verdi, B k triangoli rossi). A destra, il bordo dopo l'eliminazione di due punti.UNjBK

Per algoritmi più complessi puoi cercare " tecniche di generalizzazione poligonale " sebbene la tua prima condizione (i punti in A siano contenuti in B) implichi alcune ulteriori operazioni di ridimensionamento.


@Suresh: sono abbastanza sicuro che gli attuali 4 voti siano per la trasparenza, non per l'algoritmo (quasi banale) :)
Marzio De Biasi

1
Questo soffre dello stesso problema degli algoritmi Ramer-Douglas-Peucker: l'output non è garantito come un semplice poligono!
Jeffε

1
@Jeffe: hai ragione, ma (tutt'altro che ottimale se il poligono è complesso) si possono evitare semplificazioni che portano a un conflitto . Alla fine, se ci sono altri punti che devono essere rimossi ma il poligono non semplice non può essere evitato, utilizzare un metodo di risoluzione dei conflitti (ad esempio calcolare i punti di intersezione e scartare completamente i "buchi"). Tuttavia, vorrei vedere un vero esempio dall'OP.
Marzio De Biasi,

1
@MarzioDeBiasi Potrebbe funzionare. Ma potrebbe non farlo. Penso che sia possibile che ogni semplificazione descritta descriva un autointersezione. E "lanciare anelli" può peggiorare le cose, non meglio. Questa è probabilmente una buona soluzione in pratica, ma ricorda dove siamo!
Jeffε

Grazie Marzio, ora so almeno come si chiamano questi tipi di problemi adesso! Purtroppo la soluzione che hai dato è ciò che (3) e (4) sono nelle mie soluzioni suggerite e (4) ha un problema con esso. Le ellissi che sono molto allungate e quindi hanno punte affilate con angoli di circa 30 gradi e meno, violeranno facilmente il requisito (1).
Thirlan,

6

Ho scritto un articolo molto tempo fa che descriveva in dettaglio un algoritmo a tempo lineare per trovare il triangolo dell'area più piccola che racchiudesse un set di punti (o un poligono):

J. O'Rourke, Alok Aggarwal, Sanjeev Maddila, Michael Baldwin, "Un algoritmo ottimale per la ricerca di triangoli di chiusura minimi", J. Algorithms , 1986, 7 : 258--269. Link .

Il nostro lavoro è stato seguito da un algoritmo generale:

"Area minima che circoscrive i poligoni", Alok Aggarwal, JS Chang e Chee K. Yap, The Visual Computer , Volume 1, Numero 2 (1985), 112-117. Link .

Puoi utilizzare Google Scholar per tenere traccia di quei documenti successivi che li citano per trovare miglioramenti e lavori correlati.

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.