Eventuali duplicati:
How to find largest triangle in convex hull aside from brute force searchgrande triangolo da un insieme di punti
Ho una serie di punti casuali da cui voglio trovare il più grande triangolo per area che di verticies sono ciascuno su uno di questi punti.
Finora ho capito che le vertici del triangolo più grande si trovano solo sui punti esterni della nuvola di punti (o sullo scafo convesso), quindi ho programmato una funzione per fare proprio questo (usando la scansione Graham in tempo nlogn).
Tuttavia, è lì che sono bloccato. L'unico modo per capire come trovare il triangolo più grande da questi punti è usare la forza bruta in tempo n^3, che è comunque accettabile in un caso medio, dato che l'algoritmo dello scafo convesso di solito tira fuori la maggior parte dei punti. Tuttavia, nel peggiore dei casi in cui i punti sono su un cerchio, questo metodo fallirebbe miseramente.
Dose qualcuno conosce un algoritmo per farlo in modo più efficiente?
Nota: so che CGAL ha questo algoritmo ma non ci sono dettagli su come è stato eseguito. Non voglio usare le librerie, voglio imparare questo e programmarlo da solo (e anche permettermi di modificarlo esattamente come voglio che funzioni, proprio come la Graham Scan in cui altre implementazioni raccolgono punti collineari che non voglio).
Qual è il nome della routine in CGAL che esegue questa operazione? – andand
@andand: maximum_area_inscribed_k_gon_2, penso. – Faken
@Faken: il codice sorgente non dice quale algoritmo CGAL :: maximum_area_inscribed_k_gon_2 utilizza. Tuttavia, potresti voler dare un'occhiata a questo (http://www.cgal.org/Manual/latest/include/CGAL/extremal_polygon_2.h) e vedere se riesci a ricostruire la logica. – andand