2009-01-25 19 views
5

Ho una vasta gamma di vertici, alcuni di loro sono bordi, alcuni sono ridondanti (all'interno della forma) e voglio rimuoverli.Algoritmo migliore per trovare i bordi (poligono) dei vertici

L'algoritmo più semplice che potessi pensare è quello di verificare uno ad uno se colpiscono la forma formata dagli altri. Ma dovrebbe essere un algoritmo molto lento.

Ho pensato di sceglierne uno dal bordo (quello più lontano dall'origine per esempio) e calcolare il percorso più lungo da questo inizio ... dovrebbe ottenere il percorso bordo, giusto?

Qualche suggerimento?

+0

Vuoi _a_ poligono che copra tutti i punti o vuoi il poligono più piccolo (in termini di area) che copre tutti i punti? – sykora

+0

@sykora, un poligono che copre tutti i punti. la scansione di Graham sembra valida. Grazie. – fabiopedrosa

risposta

7

Il trucco con gli algoritmi poliedrici è scegliere quello che si adatta al vostro input e al vostro output desiderato, poiché vi è più di un modo per rappresentare un poliedro e la conversione tra le rappresentazioni può essere costosa. In questo caso, stai iniziando con i punti e vuoi finire con i vertici, quindi l'algoritmo Graham scan per calcolare i vertici dello convex hull dovrebbe fare il trucco, anche se potrebbe essere necessario un certo sforzo per estenderlo oltre il caso 2-D. È O (n log n) nel numero di vertici di input.

+0

La scansione Graham fornisce fondamentalmente lo scafo convesso. – shoosh

6

Non so quale sia il miglior algoritmo per trovare il poligono, ma il poligono che si sta cercando si chiama "Convesso Scafo".

Effettuando una ricerca, è necessario trovare un algoritmo di corrispondenza.

+0

Non penso che stia cercando lo scafo convesso, dal momento che vuole i bordi del poligono formato dai suoi vertici. Uno scafo convesso escluderebbe anche alcuni che potrebbe desiderare. – sykora

+0

"alcuni sono ridondanti (all'interno della forma) e voglio rimuoverli." – Timbo

+0

Non sto cercando di ridurre i bordi ... Sto cercando di costruire un poligono da una collezione di vertici che ne ha alcuni ridondanti. – fabiopedrosa

4

The Convex Hull è uno dei problemi più ricercati della geometria computazionale. Graham Scan è uno dei più semplici convex hull algorithms, ma certamente non l'unico. The Gift-wrapping Algorithm, chiamato anche Jarvis 'March, è il più semplice che io conosca. The Stony Brook algorithm repository ha diverse implementazioni degli algoritmi dello scafo convesso in C e C++. Geometry in Action mostra principalmente applicazioni di scafi convessi. Ecco una raccolta di programmi di calcolo dello scafo convesso low-dimensional e arbitrary-dimensional.