Mmmhh.. yo también me siento un poco confuso a primera vista..
Vamos a clarificar ideas:
Un Vector, en este caso, se trata de una línea imaginaria que une
dos puntos de un eje de coordenadas.
Es decir, para crear un Vector, necesitamos localizar dos puntos en el eje. Cada punto tiene dos coordenadas, una para el eje X (horizontal) y otra para el eje Y(vertical)
Ejemplo:
Los vectores tienen un "sentido", es decir, comienzan en un punto y acaban en el otro. En esa imagen, el Vector va de punto A(origen) hacia el punto B(extremo)
Y además tienen una propiedad llamada
"las componentes", que es el resultado de restar las coordenadas del punto extremo menos las del punto origen.
Es decir, si un vector tiene origen en (2, 3) y extremo en (10, 7), sus "componentes" serán (10-2, 7-3) =
(8, 4)
Es importante aclarar que aunque las "componentes" se expresan con dos valores como los puntos de coordenadas, en realidad
NO SON PUNTOS DE COORDENADAS
Las coordenadas indican un punto concreto en el eje cartesiano. Las "componentes" NO, solo indican la diferencia entre las coordenas del vector.
Podríamos decir que nos indican la "longitud" del vector, pero no nos dicen donde se sitúa el vector dentro del eje de coordenadas.
Todas estas explicaciones son necesarias para poder entender luego qué es lo que tenemos que escribir con código.
Bien, pues en este ejercicio se nos dice que todos los Vectores tienen origen, en el origen de coordenadas, es decir, en (0, 0)
Así que para modelar una clase Vector, solo necesitamos guardar el punto extremo, porque ya sabemos que el origen siempre será (0, 0)
Podríamos modelarlo usando dos atributos de tipo int
Por ahora, lo dejamos así. Sin embargo, ahora veremos que si lo hacemos así se nos va a presentar un problema con los constructores..
Nos piden estos constructores:
El primer y segundo constructor, si es que los estoy entendiendo bien..., nos van a crear un conflicto.
El primero nos pide sus dos componentes, que ya hemos dicho que, es la resta de las coordenadas extremas menos las coordenadas origen.
El segundo nos pide el punto extremo, es decir, las dos coordenadas extremas.
Es un poco absurdo, porque si todos estos Vectores se originan en 0, 0, pues los valores de las componentes siempre serán iguales a los valores del punto extremo.
Es decir, un Vector con origen (0, 0) y extremo (4, 5)
Los valores de su punto extremo son
(4, 5)
Y sus componentes son (4-0, 5-0) =
(4, 5)
Así que es redundante. Pero el verdadero problema viene que para ambos casos, a los constructores habría que darle dos enteros.
Y esto el compilador Java no lo admite, considera que estamos duplicando el mismo constructor (lo cuál es cierto).
Lo lógico y práctico sería dejar solo uno, porque como ya hemos explicado y estamos viendo, van a hacer la misma operación tanto si le pasamos las componentes, como si le pasamos los valores del punto extremo.
Pero el enunciado nos pide un constructor para cada caso, así que para cumplir con ello, seguiremos otra estrategia distinta (y menos práctica)
Podemos crear otra clase llamado
Punto, que será quien tenga los atributos de las coordenadas X e Y.
Y la clase
Vector, ahora lo que tendrá será un atributo
Punto. Así, podemos usar un constructor con dos int para construir un Vector conociendo sus componentes.
Y otro constructor que reciba un
Punto, que sería el punto Extremo
Resuelto el conflicto de los dos primeros constructores, queda un tercero:
Según creo entender, nos darían los dos puntos de un Vector que quizás no tenga origen 0, 0
Y digamos que hemos de "trasladarlo" para que se origine en 0, 0, respetando su "longitud" y así calcular su punto extremo.
¿Suena muy difícil hace esto?
Pues no lo es, basta con calcular sus "componentes". Y como nuestros Vectores siempre se originan en 0, 0, pues las "componentes" coinciden con las coordenadas del Punto extremo, que es precisamente lo que tenemos que calcular.
Bien, pues ya tendríamos los tres constructores.
Sobre esta parte:
Supongo que desean que hagamos dos métodos, que reciban otro Vector para compararse y comprobar esas características.
Estas comparaciones, se hacen en base a las "componentes" del Vector:
Y, repito una vez más, en nuestro caso las "componentes" coinciden con las coordenadas del Punto extremo, así que no necesitamos calcular las "componentes" porque en realidad ya las tenemos (el calculo sería restar 0 a las coordenadas del extremo, así que es innecesario)
Estos podrían ser los métodos:
Y creo que ya está. Solo faltaría crear un main() para construir Vectores y probar a compararlos.
Por ejemplo aquí creo dos vectores ortogonales, pero no paralelos
Y la comparación parece funcionar según lo que vemos en pantalla:
Y creo que eso es todo. Si lago no ha quedado claro, pregúntalo e intento explicarlo mejor.
Un saludo.