Encuentra convexo casco de puntos dados el uso de esta aplicación es de envoltura algoritmo para encontrar Grift casco convexo.
privado static final entero cero = new Integer (0); / ** * Encuentra convexo casco de puntos dados * * * @ref Vértices @param * @regreso * / Lista estática privada <Punto> findConvexHull (Lista final <Punto> vértices) { if (vértices == null) Collections.emptyList volver (); si (vertices.size () <3) vértices de regreso; Lista final <Punto> Puntos = new ArrayList <Punto> (vértices); Lista final <Punto> casco = new ArrayList <Punto> (); Punto pointOnHull = getExtremePoint (puntos, true); Punto de llegada = null; hacer { hull.add (pointOnHull); punto final = points.get (0); para (último punto R: puntos) { // La distancia se utiliza para encontrar el punto más externo - int última vuelta = findTurn (pointOnHull, punto final, r); (si endpoint.equals (pointOnHull) || convierten == -1 || convertir == 0 &&dist (pointOnHull, r)> dist (punto final, pointOnHull)) { punto final = r; } } pointOnHull = punto final; } While (endpoint.equals (hull.get (0))!); // Estamos de vuelta al inicio casco de regreso; } dist doble estática privada (último punto p, q Punto Final) { dx doble final = (q.x - p.x); doble dy final = (q.y - p.y); volver dx * dx dy * dy; } / ** * Devuelve -1, 0, 1 si p, q, r formas un derecho, o turno recta dada. * 1 = izquierda, derecha = -1, 0 = ninguno * * * @param P @ref * @ Param q * @param R * @return 1 = izquierda, derecha = -1, 0 = ninguno * / private int estática findTurn (último punto p, q Punto final, último punto r) { final int x1 = (q.x - p.x) * (r.y - p.y); final int x2 = (r.x - p.x) * (q.y - p.y); última int anotherInteger = x1 - x2; volver ZERO.compareTo (anotherInteger); }