package FigurasGeometricas; public class LineaPoligonal { private Punto[] vertices; private int talla; public LineaPoligonal() { vertices = new Punto[8]; talla = 0; } private void asegurarSitio() { if(talla == vertices.length) { Punto[] verticesNuevo = new Punto[vertices.length * 2]; for (int i = 0; i < vertices.length; i++) { verticesNuevo[i] = vertices[i]; } vertices = verticesNuevo; } } public void añadir(Punto punto) { asegurarSitio(); vertices[talla++] = punto; } public void quitar(int posicion) { if (posicion >= 0 && posicion < talla) { for (int i = posicion; i < talla - 1; i++) { vertices[i] = vertices[i + 1]; } talla--; } } public void quitar (Punto punto) { for (int i = 0; i < talla; i++) { if (vertices[i].equals(punto)) { quitar(i); return; } } } public void mover(double desplazamientoX, double desplazamientoY) { for (int i = 0; i < talla; i++) { vertices[i].mover(desplazamientoX, desplazamientoY); } } public double longitud() { double suma = 0; for (int i = 0; i < talla - 1; i++) { suma = suma + vertices[i].distancia(vertices[i + 1]); } return suma; } public String toString() { if(talla == 0) { return ""; } else if (talla == 1) { return "" + vertices[0]; } else { // Evitamos crear la String resultante concatenándole // vértices uno a uno con s += "--" + vertices[i] porque // el tiempo de ejecución de este método crecería de forma // cuadrática al crecar la cantidad de vértices. Aquí se // ilustra una solución mejor, usando StringBuilder. StringBuilder sb = new StringBuilder(); sb.append("" + vertices[0]); for (int i = 1; i < talla; i++) { sb.append("--" + vertices[i]); } return sb.toString(); } } public boolean equals (Object otroObjeto) { if ( ! (otroObjeto instanceof LineaPoligonal) ) { return false; } else { LineaPoligonal otraLineaPoligonal = (LineaPoligonal) otroObjeto; if (this == otraLineaPoligonal) { return true; } else if (talla != otraLineaPoligonal.talla) { return false; } else { for (int i = 0; i < talla; i++) { if ( ! vertices[i].equals(otraLineaPoligonal.vertices[i]) ) { return false; } } return true; } } } public LineaPoligonal crearCopiaEnProfundidad() { LineaPoligonal copia = new LineaPoligonal(); copia.talla = talla; copia.vertices = new Punto[vertices.length]; for (int i = 0; i < talla; i++) { copia.vertices[i] = vertices[i].crearCopia(); } return copia; } }