2011-11-02 16 views
19

Tengo una lista de puntos que forman una curva, y me gustaría reducir el número de puntos, pero aún así mantener la forma general de la curva.Cómo reducir el número de puntos en una curva mientras se preserva su forma general?

Básicamente, quiero ir de esta:

enter image description here

A esto:

enter image description here

Así que el algoritmo eliminaría los puntos que son redundantes pero preserva a los que realmente definen la forma (como los puntos en la parte inferior de la curva). ¿Hay algún algoritmo conocido para hacer eso? Espero que exista, pero no estoy seguro de qué buscar en Google. Cualquier ayuda sería apreciada.

+5

no tengo ningún algoritmo para usted, pero por lo general se refieren a este proceso como 'decimation' vértice. Tal vez eso ayude en su Google. –

Respuesta

23
+0

Gracias, terminé usando el algoritmo Douglas-Peucker que funciona muy bien. –

+1

@ this.lau_ ¿Puede compartir su implementación para este algoritmo? – EmptyData

13

Existen varios algoritmos para esto.

La más simple es, probablemente, simplemente seguir eliminando el punto cuyo ángulo entre los puntos vecinos es más cercano a 180 grados, hasta cierto umbral, o hasta que haya alcanzado el número deseado de puntos.

Si la curva es lisa como en su imagen, probablemente obtendrá mejores aproximaciones (o menos puntos si lo desea) mediante el uso de curvas de Bezier, por ejemplo.

+0

Gracias, pero creo que la primera sugerencia no me funcionaría porque mis datos no son tan claros como en el ejemplo. Puede haber pequeños desorden de puntos muy cerca unos de otros, que se deben reducir a un solo punto independientemente del ángulo. El uso de una curva Bezier probablemente haría el problema más complejo en lugar de simplificarlo, y haría el renderizado más lento. –

Cuestiones relacionadas