me gustaría comprobar si un conjunto de N puntos describir un polígono convexo o noAlgoritmo para encontrar si un conjunto de puntos describe un enveloppe convexa
Me preguntaba si hay un buen algoritmo para eso?
Aquí es algunos enfoques que pensé:
algoritmo1.Convex casco:
Si el conjunto es igual a su casco convexo entonces es convexa. La complejidad de dicho algoritmo es O (n * LN (N)). Pero tuve la sensación de que era como romper una mariposa en una rueda.
3.Looking en los ángulos:
Entonces pensé de comprobar si los ángulos de 2 vectores consecutivos nunca exceden de 180 °. Pero desde mis puntos no están ordenados Tengo que comprobar todas las combinaciones de 3 puntos consecutivos y eso hace como un O complejidad (n3). (No debe haber una manera de hacerlo mejor que eso)
Intento seleccionar puntos de derecha a izquierda, por ejemplo, pero los resultados no son siempre el esperado:
por ejemplo, en este caso me parece una forma convexa si tomo de izquierda a derecha:
Así, por esta Solución Necesitaré un buen algoritmo para seleccionar los puntos.
3. mirando el baricentro:
pienso que comprobar si el baricentro de todo el punto 3 es consecutivos dentro de la forma me dirá si la forma es convexa del no.
Aquí es lo que quiero decir (G es el baricentro de cada triángulo):
para esta solución que puede seleccionar los puntos de izquierda a derecha sin problemas. si la complejidad de verificar si G tiene la forma es O (N), entonces la complejidad global sería algo así como O (N2).
¿Me podría aconsejar sobre un buen algoritmo para resolver este problema o mejorar las soluciones que estoy pensando
Gracias de antemano
Sugerencia rápida para el método 1: en lugar de construir realmente el casco convexo, simplemente ejecute el algoritmo y termine tan pronto/si descarta algún punto. – user786653
Voy a echar un vistazo a eso. Gracias –
Perdí la ventana de edición de mi comentario. 'the algorithm' = [Grahams Scan] (http://en.wikipedia.org/wiki/Graham_scan) (Hace más o menos lo que su método 2 sugiere por cierto). Además, sé que esto no mejorará el tiempo de ejecución asintótico, pero hace que el problema sea muy fácil de paralelizar. – user786653