4. Construir vectores a partir de puntos, ángulos y distancias

Los datos de un problema pueden llegar como coordenadas, como una longitud orientada o como módulo y ángulo; construir el vector consiste en traducirlos a una representación común.

4.1 Distintas entradas, un mismo vector

Un sistema de posicionamiento puede entregar dos puntos, un sensor puede informar intensidad y ángulo, y una consigna puede describir una distancia hacia un punto cardinal. En los tres casos necesitamos obtener las componentes del vector para utilizarlo en cálculos y programas.

La construcción vectorial traduce los datos disponibles sin cambiar su significado físico. Antes de aplicar una fórmula debemos identificar el sistema de referencia, la convención angular y las unidades.

Proceso: interpretar los datos → declarar la referencia → convertir unidades → calcular componentes → comprobar módulo, dirección y sentido.

4.2 Desde un punto inicial y uno final

Si A es el origen y B el extremo, el vector se obtiene restando las coordenadas iniciales a las finales:

AB = B − A = (xB − xA, yB − yA)

Para A = (2, −1) m y B = (7, 3) m, AB = (5, 4) m. Si invertimos el orden obtenemos BA = (−5, −4) m.

function desdePuntos(inicio, fin) {
  return { x: fin.x - inicio.x, y: fin.y - inicio.y };
}

const A = { x: 2, y: -1 };
const B = { x: 7, y: 3 };
console.log(desdePuntos(A, B));

4.3 Distancia entre los puntos

El módulo del vector entre A y B coincide con la distancia recta entre esos puntos:

distancia(A, B) = √[(xB − xA)² + (yB − yA)²]

La distancia es escalar y no puede ser negativa. El vector AB y su opuesto BA tienen la misma distancia, aunque sus sentidos sean contrarios.

4.4 Desde módulo y ángulo

Si conocemos el módulo r y el ángulo θ medido desde +x en sentido antihorario, proyectamos el vector sobre los ejes:

vx = r cos(θ)
vy = r sen(θ)

Para r = 10 m y θ = 30°, las componentes son aproximadamente (8,66; 5) m. El coseno determina la componente adyacente al ángulo y el seno la opuesta.

Importante: estas fórmulas suponen que θ se mide desde +x. Si la consigna usa otro eje de referencia, primero debemos adaptar el ángulo.

4.5 Grados y radianes

Las funciones Math.sin() y Math.cos() reciben radianes. Un giro completo equivale a 360° o 2π radianes:

radianes = grados × π / 180
grados = radianes × 180 / π
function desdeModuloAngulo(modulo, grados) {
  const angulo = grados * Math.PI / 180;
  return {
    x: modulo * Math.cos(angulo),
    y: modulo * Math.sin(angulo)
  };
}

console.log(desdeModuloAngulo(10, 30));

Pasar 30 directamente a Math.cos haría que JavaScript lo interprete como 30 radianes y produciría componentes incorrectas.

4.6 Signos y cuadrantes

Signos de seno y coseno según el cuadrante.
ÁnguloCuadrantecos θsen θ
0° a 90°I++
90° a 180°II−+
180° a 270°III−−
270° a 360°IV+−

Las funciones trigonométricas producen automáticamente los signos correctos. Esta tabla permite anticiparlos y detectar errores de conversión.

4.7 Ángulos equivalentes

Los ángulos 30°, 390° y −330° describen la misma orientación porque difieren en vueltas completas. Para mostrar un ángulo entre 0° y 360° podemos normalizarlo:

function normalizarAngulo(grados) {
  return ((grados % 360) + 360) % 360;
}

console.log(normalizarAngulo(390));
console.log(normalizarAngulo(-330));

Normalizar cambia la forma de escribir el ángulo, no la dirección del vector.

4.8 Orientaciones expresadas con palabras

Cuando +x representa el este y +y el norte, podemos traducir descripciones habituales:

  • «20 m al este» → (20, 0) m.
  • «20 m al oeste» → (−20, 0) m.
  • «20 m al norte» → (0, 20) m.
  • «20 m al sur» → (0, −20) m.
  • «20 m a 35° al norte del este» → θ = 35°.
  • «20 m a 35° al este del norte» → θ = 90° − 35° = 55°.

Las palabras que siguen a «del» indican el eje desde el cual comienza a medirse el ángulo.

4.9 Desde una distancia y un vector unitario

Otra forma de construir un vector consiste en multiplicar una distancia d por un vector unitario u que indique la orientación:

v = d u,   con |u| = 1

Si u = (0,6; 0,8) y d = 15 m, entonces v = (9; 12) m. Esta separación entre tamaño y orientación resulta útil cuando varias entidades avanzan distancias diferentes en la misma dirección.

4.10 Recuperar módulo y ángulo para comprobar

Después de construir las componentes podemos recuperar los datos originales:

módulo = Math.hypot(x, y)
ángulo = Math.atan2(y, x) * 180 / Math.PI

Los resultados pueden contener pequeñas diferencias por redondeo. En vez de exigir igualdad exacta, comparamos con una tolerancia apropiada.

function desdeModuloAngulo(modulo, grados) {
  const angulo = grados * Math.PI / 180;
  return { x: modulo * Math.cos(angulo), y: modulo * Math.sin(angulo) };
}

const esperado = 10;
const vector = desdeModuloAngulo(esperado, 30);
const recuperado = Math.hypot(vector.x, vector.y);
const coincide = Math.abs(recuperado - esperado) < 1e-10;

console.log(recuperado, coincide);

4.11 Laboratorio de construcción

Alterná entre los dos métodos. En el modo «módulo y ángulo», una vuelta completa conserva las componentes; en el modo «dos puntos», mover el origen sin mover el extremo cambia el vector.

Origen
Extremo
Componentes
Módulo
Ángulo

Vector construido desde módulo y ángulo.

4.12 Validaciones necesarias

  • El módulo o la distancia no deben ser negativos.
  • Las coordenadas de ambos puntos deben usar el mismo sistema y unidad.
  • La convención angular debe quedar explícita.
  • Si los dos puntos coinciden, el resultado es el vector nulo y su dirección es indeterminada.
  • Los datos ingresados deben ser números finitos.
  • El redondeo debe aplicarse al mostrar, no durante los cálculos intermedios.

4.13 Errores frecuentes

  • Restar inicio menos fin y obtener el sentido contrario.
  • Confundir la distancia con una componente.
  • Pasar grados directamente a las funciones trigonométricas de JavaScript.
  • Intercambiar seno y coseno cuando el ángulo se mide desde +x.
  • Ignorar el eje usado como referencia en una orientación verbal.
  • Forzar una dirección para el vector nulo.
  • Redondear componentes demasiado pronto y alterar el módulo.

4.14 Ejercicio integrador

Una embarcación parte de A = (−4, 2) km y navega 12 km a 35° al norte del este.

  1. Calculá las componentes del desplazamiento.
  2. Obtené las coordenadas del punto final B.
  3. Recuperá módulo y ángulo desde las componentes.
  4. Calculá el vector que permitiría regresar directamente de B hasta A.
  5. Implementá y comprobá el cálculo en JavaScript.
Ver solución y código

El ángulo estándar es 35°. Las componentes son aproximadamente (9,83; 6,88) km. El punto final es B ≈ (5,83; 8,88) km. El regreso directo es el vector opuesto: (−9,83; −6,88) km.

function crearVector(modulo, grados) {
  if (!Number.isFinite(modulo) || modulo < 0) throw new Error("Módulo inválido");
  const radianes = grados * Math.PI / 180;
  return { x: modulo * Math.cos(radianes), y: modulo * Math.sin(radianes) };
}

const A = { x: -4, y: 2 };
const desplazamiento = crearVector(12, 35);
const B = { x: A.x + desplazamiento.x, y: A.y + desplazamiento.y };
const regreso = { x: -desplazamiento.x, y: -desplazamiento.y };

console.log({ desplazamiento, B, regreso });
console.log("Comprobación:", Math.hypot(desplazamiento.x, desplazamiento.y), "km");

4.15 Ideas para recordar

  • Desde dos puntos: vector = punto final − punto inicial.
  • La distancia entre puntos coincide con el módulo del vector que los une.
  • Desde módulo y ángulo: x = r cos θ, y = r sen θ.
  • JavaScript recibe ángulos trigonométricos en radianes.
  • Una descripción verbal debe traducirse según el eje de referencia.
  • Un vector también puede construirse multiplicando distancia por dirección unitaria.
  • Recuperar módulo y ángulo permite comprobar la construcción.

En el próximo tema estudiaremos la suma y resta de vectores mediante métodos gráficos y analíticos.