Enunciado Tipo NubePuntos


Tipo Punto

Defina el tipo Punto con dos coordenadas reales, ambas consultables y modificables. Defina el TipoCuadrante con los valores PRIMER, SEGUNDO, TERCER, CUARTO y EJES y el TipoDiana con los valores INTERIOR, MEDIO y EXTERIOR. Un punto pertenecerá a algún cuadrante en función del signo de sus coordenadas según la representación cartesiana y si alguna de sus coordenadas es cero entonces estará sobre un eje.
Proporcione un método que calcule la distancia entre dos puntos y reutilícelo para otro método que devuelva la distancia al origen de coordenadas.
Un punto pertenecerá a alguno de los valores de TipoDiana según la distancia al origen sea respectivamente menor de 4, mayor de 4 y menor de 8 o mayor de 8. Proporcione al tipo Punto un método que devuelva su TipoDiana correspondiente.
Finalmente proporcione al tipo Punto un método tal que dados dos valores reales vx e vy desplace sus coordenadas en la dirección y sentido del vector (vx,vy). Defina ORIGEN como un atributo estático y final para la clase PuntoImpl.
Proporcione a PuntoImpl un constructor a partir de dos valores reales para sus coordenadas y a partir de un String con dos valores reales separados por una coma. Implemente los métodos toString, equals y compareTo. Dos puntos se ordenaran primero por su coordenada X y a igualdad de esta por su coordenada Y.

Tipo NubePuntos
Vamos a definir un tipo NubePuntos para guardar una colección de objetos de tipo Punto. La funcionalidad de este tipo será la siguiente:
1.       Un método tal que dado un valor real nx devuelva el número de puntos que tienen abscisa mayor de nx.

2.       Un método tal que dado un valor de TipoCuadrante devuelva el número de puntos en ese cuadrante, no olvide los puntos sobre los ejes.

3.       Un método tal que dado un valor real d devuelva el número de puntos cuya distancia al origen es menor que d.

4.       Devuelva un Punto que sea el centro de gravedad de la nube. Esto es, el punto cuyas coordenadas son la media de las coordenadas de los puntos.

5.       Devuelva si existe algún punto sobre el eje de abscisas.

6.       Dado un Punto p y un radio r devuelva si existe algún punto dentro del círculo de centro p y radio r.

7.       Dado un valor real d, devuelve si es cierto que todos los puntos están a una distancia al origen menor que d.

8.       Devuelve el Punto más lejano al origen de coordenadas.

9.       Dado un Punto p, devuelva el punto de la nube más cercano.

10.   Dado un valor real d, devuelva una NubePuntos con aquellos que estén a una distancia menor que d del origen.

11.   Devuelva un Map que asocie a cada TipoCuadrante un SortedSet con los puntos de ese cuadrante ordenados por distancia al origen.

12.   Devuelva un Map que asocie a cada TipoCuadrante el número de puntos que hay de ese tipo

13.   Devuelva un SortedMap que asocie a cada TipoDiana un Set con los puntos que le corresponden.

14.   Dados dos valores vx e vy desplace toda la nube en la dirección y sentido indicados por el vector (vx,vy).

15.   Dado un valor de TipoCuadrante devuelva un Punto con la suma de todas las coordenadas de los puntos de ese cuadrante.

16.   Devuelva un SortedMap que asocie a cada TipoCuadrante el Punto cuyas coordenadas sean la suma de todas las coordenadas de los puntos de ese cuadrante.

17.   Devuelva un SortedMap que asocie a cada TipoCuadrante el Punto centro de gravedad de los puntos de ese cuadrante.

18.   Proporcione a la clase NubePuntos un constructor público tal que reciba el nombre de un fichero conteniendo en cada línea dos valores reales separados por una coma con las coordenadas de los puntos y un constructor privado que reciba una List<Punto> para usarlo en el ejercicio 10.
 
Implemente todos los métodos anteriores en dos clases para NubePuntos, una denominada NubePuntosImpl usando los esquemas iterativos habituales y otra NubePuntosImpl2 usando los métodos de stream de Java 8. Compare los resultados.




No hay comentarios:

Publicar un comentario