Duplicar posibles:
How to find largest triangle in convex hull aside from brute force searchtriángulo más grande de un conjunto de puntos
Tengo un conjunto de puntos aleatorios de la que quiero encontrar el mayor triángulo por área que es vértices son cada en uno de esos puntos
Hasta ahora he descubierto que las verticies del triángulo más grande solo se encontrarán en los puntos exteriores de la nube de puntos (o el casco convexo) así que he programado una función para hacer eso (usando Graham scan in nlogn time)
Sin embargo, ahí es donde estoy atascado. La única manera en que puedo encontrar la manera de encontrar el triángulo más grande a partir de estos puntos es usar fuerza bruta en n^3 veces, lo cual es aceptable en un caso promedio ya que el algoritmo de casco convexo generalmente arroja la gran mayoría de los puntos. Sin embargo, en el peor de los casos en que los puntos están en un círculo, este método fallaría miserablemente.
Dosis ¿Alguien sabe un algoritmo para hacer esto de manera más eficiente?
Nota: Sé que CGAL tiene este algoritmo allí pero no entran en detalles sobre cómo se hace. No quiero usar bibliotecas, quiero aprender esto y programarlo yo mismo (y también permitirme modificarlo exactamente de la manera que quiero que funcione, al igual que el escaneo Graham en el que otras implementaciones recogen puntos colineales que no quiero).
¿Cuál es el nombre de la rutina en CGAL que hace esto? – andand
@andand: maximum_area_inscribed_k_gon_2, creo. – Faken
@Faken: el código fuente no dice qué algoritmo utiliza CGAL :: maximum_area_inscribed_k_gon_2. Aún así, es posible que desee echarle un vistazo (http://www.cgal.org/Manual/latest/include/CGAL/extremal_polygon_2.h) y ver si puede reconstruir la lógica. – andand