Source: Vector2.js

/**
 * @author Antonio Raúl Guijarro Contreras <alu0101100494@ull.edu.es>
 * @file Declaración de la clase Vector2. Simula el comportamiento de un vector bidimesional
 * @copyright Antonio Raúl Guijarro Contreras 2020
 * @since 21.04.2020
 */

'use stric'

/**
 * Clase Vector2. Simula el comportamiento de un vector bidimesional
 */
class Vector2 {

  /**
   * @param {Number} x Coordenada en el eje x
   * @param {Number} y Coordenada en el eje y
   */
  constructor(x = 0, y = 0) {
    this.x = x;
    this.y = y;
  }

  /**
   * Getter que devolverá las coordenadas en forma de array.
   */
  get() {
    return [this.x, this.y];
  }

  /**
   * Realiza la suma entre el vector que invoca y el argumento. El resultado no se almacena
   * en el invocante; Retorna el resultado.
   * @param {Vector2} vector2 Vector bidimensional
   * @return {Vector2} Resultado de la suma de ambos vectores.
   */
  add(vector2) {
    return new Vector2(this.x + vector2.x, this.y + vector2.y);
  }

  /**
   * Realiza la resta entre el vector que invoca y el argumento. El resultado no se almacena
   * en el invocante; Retorna el resultado.
   * @param {Vector2} vector2 Vector bidimensional
   * @return {Vector2} Resultado de la suma de ambos vectores.
   */
  subs(vector2) {
    return new Vector2(this.x - vector2.x, this.y - vector2.y);
  }

  /**
   * Realiza la multiplicación entre el vector que invoca y el argumento. El resultado no se almacena
   * en el invocante; Retorna el resultado.
   * @param {Vector2} vector2 Vector bidimensional
   * @return {Vector2} Resultado de la suma de ambos vectores.
   */
  mult(vector2) {
    return this.x * vector2.x + this.y * vector2.y;
  }

  /**
   * Realiza la multiplicación entre el vector que invoca y el argumento. El resultado no se almacena
   * en el invocante; Retorna el resultado.
   * @param {Vector2} vector2 Vector bidimensional
   * @return {Vector2} Resultado de la suma de ambos vectores.
  */
  multScalar(scalar) {
    return new Vector2(this.x * scalar, this.y * scalar);
  }


  /**
   * Realiza la multiplicación entre el vector que invoca y el argumento. El resultado no se almacena
   * en el invocante; Retorna el resultado.
   * @param {Vector2} vector2 Vector bidimensional
   * @return {Vector2} Resultado de la suma de ambos vectores.
   */
  divideScalar(scalar) {
    return new Vector2(this.x / scalar, this.y / scalar);
  }

}

export default Vector2;