11. Producto escalar y ángulo entre vectores

El producto escalar transforma dos vectores en un número que mide cuánto se orienta uno en la dirección del otro.

11.1 Una operación que produce un escalar

La suma de vectores produce otro vector. El producto escalar, también llamado producto punto, recibe dos vectores y produce un número. Ese número combina sus módulos con la relación angular entre ellos.

Se utiliza para medir alineación, comprobar perpendicularidad, calcular ángulos y expresar cuánto de un vector actúa en la dirección de otro.

No es una multiplicación componente a componente cuyo resultado sea otro vector. Los productos de componentes se suman y el resultado final es escalar.

11.2 Definición por componentes

Para a = (ax, ay) y b = (bx, by):

a · b = axbx + ayby

Si a = (3, 2) y b = (4, −1), entonces a · b = 3·4 + 2·(−1) = 10.

function productoEscalar(a, b) {
  return a.x * b.x + a.y * b.y;
}

console.log(productoEscalar({ x: 3, y: 2 }, { x: 4, y: -1 }));

11.3 Definición geométrica

La misma operación puede expresarse mediante los módulos y el menor ángulo θ entre los vectores:

a · b = |a| |b| cos θ

Esta fórmula explica que el producto escalar depende tanto del tamaño de los vectores como de su alineación. El ángulo considerado está entre 0° y 180°.

11.4 Interpretar el signo

Relación entre ángulo y signo del producto escalar.
Ángulo θcos θa · bInterpretación
0° a menos de 90°PositivoPositivoOrientación general semejante
90°CeroCeroPerpendiculares
Más de 90° a 180°NegativoNegativoOrientación general opuesta

El signo permite clasificar rápidamente la relación angular sin calcular el ángulo completo.

11.5 Casos conocidos

  • Mismo sentido: θ = 0°, por lo tanto a·b = |a||b|.
  • Sentidos opuestos: θ = 180° y el resultado es −|a||b|.
  • Perpendiculares: θ = 90° y el resultado es cero.
  • Vector consigo mismo: a·a = |a|².
  • Con el vector nulo: el producto vale cero, pero no existe un ángulo definido.
Advertencia: un producto escalar cero implica perpendicularidad solo cuando ambos vectores son no nulos.

11.6 Calcular el ángulo entre vectores

Para dos vectores no nulos, despejamos el coseno:

θ = arccos[(a · b) / (|a||b|)]

Math.acos() devuelve radianes. Debido al redondeo, el cociente puede quedar apenas fuera de [−1, 1]; debemos limitarlo antes de llamar a la función.

function anguloEntre(a, b) {
  const ma = Math.hypot(a.x, a.y);
  const mb = Math.hypot(b.x, b.y);
  if (ma === 0 || mb === 0) return null;
  const coseno = (a.x * b.x + a.y * b.y) / (ma * mb);
  const seguro = Math.max(-1, Math.min(1, coseno));
  return Math.acos(seguro) * 180 / Math.PI;
}

console.log(anguloEntre({ x: 1, y: 0 }, { x: 1, y: 1 }));

11.7 Comprobar ortogonalidad

Dos vectores no nulos son ortogonales si su producto escalar es cero. Por ejemplo, (3, 4) y (−4, 3) son perpendiculares porque 3·(−4) + 4·3 = 0.

Con números calculados conviene usar una tolerancia relacionada con los módulos:

function sonPerpendiculares(a, b, tolerancia = 1e-10) {
  const producto = a.x * b.x + a.y * b.y;
  const escala = Math.hypot(a.x, a.y) * Math.hypot(b.x, b.y);
  return escala !== 0 && Math.abs(producto) <= tolerancia * escala;
}

console.log(sonPerpendiculares({ x: 3, y: 4 }, { x: -4, y: 3 }));

11.8 Propiedades algebraicas

a · b = b · a
a · (b + c) = a · b + a · c
(ka) · b = k(a · b)

El producto escalar es conmutativo y distributivo. Sin embargo, no existe una expresión como a·b·c sin aclarar operaciones adicionales, porque el primer producto ya produce un escalar.

11.9 Unidades del resultado

Las unidades se multiplican. Si dos vectores son desplazamientos en metros, su producto escalar se expresa en m². Si una fuerza en N se multiplica escalarmente por un desplazamiento en m, el resultado se expresa en N·m, equivalente a joules en el contexto del trabajo mecánico.

La coincidencia de unidades no basta para asegurar que dos cantidades representen el mismo concepto físico: el contexto de la operación sigue siendo indispensable.

11.10 Alineación normalizada

Si normalizamos ambos vectores, su producto escalar es directamente cos θ y queda entre −1 y 1. Esto permite medir alineación independientemente de los módulos.

cercano a 1 → mismo sentido
cercano a 0 → aproximadamente perpendicular
cercano a −1 → sentidos opuestos

En un videojuego puede emplearse para decidir si un objetivo está aproximadamente delante de un personaje, sin calcular el ángulo.

11.11 Aplicación: trabajo de una fuerza constante

El trabajo realizado por una fuerza constante durante un desplazamiento se expresa como:

W = F · d = |F||d| cos θ

Una fuerza perpendicular al desplazamiento realiza trabajo nulo en este modelo; una componente alineada aporta positivamente y una opuesta aporta negativamente. Aquí usamos la expresión como aplicación vectorial; su interpretación física se desarrollará en el curso de energía.

const fuerzaN = { x: 12, y: 5 };
const desplazamientoM = { x: 3, y: 0 };
const trabajoJ = fuerzaN.x * desplazamientoM.x
               + fuerzaN.y * desplazamientoM.y;
console.log(trabajoJ + " J");

11.12 Laboratorio del producto escalar

Modificá ambos vectores. El arco muestra el menor ángulo entre ellos y el color del resultado indica si la relación es aguda, perpendicular u obtusa.

a · b
|a||b|
cos θ
Ángulo θ
Relación

Producto escalar positivo: el ángulo es agudo.

11.13 Producto escalar en tres dimensiones

En 3D agregamos los productos de las componentes z:

a · b = axbx + ayby + azbz

Las interpretaciones geométricas, el criterio de perpendicularidad y la fórmula del ángulo se mantienen.

11.14 Errores frecuentes

  • Devolver un vector con los productos componente a componente.
  • Olvidar sumar los productos de todas las componentes.
  • Confundir producto escalar cero con vectores nulos.
  • Dividir por cero al calcular el ángulo.
  • No limitar el coseno al intervalo [−1, 1].
  • Interpretar el signo sin considerar el ángulo.
  • Olvidar multiplicar las unidades.
  • Usar el ángulo orientado cuando la fórmula devuelve el menor ángulo.

11.15 Ejercicio integrador

Sean a = (4, −2) y b = (1, 5).

  1. Calculá a·b.
  2. Calculá los módulos.
  3. Obtené el ángulo entre ambos.
  4. Clasificá el ángulo como agudo, recto u obtuso.
  5. Construí un vector perpendicular a a y comprobalo.
Ver solución y código

El producto es 4·1 + (−2)·5 = −6. Los módulos son √20 y √26. El coseno es −6/√520 y el ángulo es aproximadamente 105,26°, por lo tanto es obtuso. Un perpendicular es (2, 4), porque (4, −2)·(2, 4) = 0.

const a = { x: 4, y: -2 };
const b = { x: 1, y: 5 };
const producto = a.x * b.x + a.y * b.y;
const ma = Math.hypot(a.x, a.y);
const mb = Math.hypot(b.x, b.y);
const coseno = Math.max(-1, Math.min(1, producto / (ma * mb)));
const angulo = Math.acos(coseno) * 180 / Math.PI;
const perpendicular = { x: -a.y, y: a.x };
const comprobacion = a.x * perpendicular.x + a.y * perpendicular.y;

console.log({ producto, ma, mb, angulo, perpendicular, comprobacion });

11.16 Ideas para recordar

  • El producto escalar combina dos vectores y produce un número.
  • Por componentes, se suman los productos de coordenadas correspondientes.
  • Geométricamente vale |a||b| cos θ.
  • Su signo distingue relaciones angulares agudas, rectas y obtusas.
  • Dos vectores no nulos son perpendiculares si su producto escalar es cero.
  • El ángulo requiere vectores no nulos y un coseno limitado a [−1, 1].
  • Con vectores unitarios, el resultado mide alineación sin depender del tamaño.

En el próximo tema utilizaremos el producto escalar para proyectar un vector sobre otro.