2011-11-02 16 views
19

Ho una lista di punti che formano una curva, e vorrei ridurre il numero di punti, mantenendo comunque la forma generale della curva.Come ridurre il numero di punti in una curva preservandone la forma generale?

Fondamentalmente, voglio andare da questo:

enter image description here

A tal:

enter image description here

Quindi l'algoritmo eliminerebbe i punti che sono ridondanti, ma conservare quelle che realmente definiscono la forma (come i punti nella parte inferiore della curva). C'è qualche algoritmo noto per farlo? Mi aspetto che ci sia, ma non sono sicuro su cosa cercare su Google. Qualsiasi aiuto sarebbe apprezzato.

+5

Non ho alcun algoritmi per te, ma di solito si riferiscono a questo processo come 'vertice decimation'. Forse questo ti aiuterà nel tuo googlare. –

risposta

23
+0

Grazie, ho finito per usare l'algoritmo di Douglas-Peucker che funziona alla grande. –

+1

@ this.lau_ Puoi condividere la tua implementazione per questo algoritmo. – EmptyData

13

Ci sono diversi algoritmi per questo.

Il più semplice è probabilmente quello di continuare a rimuovere il punto il cui angolo tra i punti vicini è più vicino a 180 gradi, fino a qualche soglia, o fino a quando non hai raggiunto il numero desiderato di punti.

Se la curva è liscia come nella foto, probabilmente otterrete approssimazioni migliori (o meno punti se lo desiderate) utilizzando le curve di Bezier per esempio.

+0

Grazie, ma penso che il primo suggerimento non funzionerebbe per me perché i miei dati non sono così puliti come nell'esempio. Ci possono essere piccoli gruppi di punti molto vicini tra loro, che dovrebbero essere ridotti a un singolo punto indipendentemente dall'angolo. L'uso di una curva di Bezier probabilmente renderebbe il problema più complesso invece di semplificarlo, rendendo più lento il rendering. –