Proyectar un vector sobre otro permite medir cuánto de un movimiento actúa en una dirección determinada. Esta operación separa componentes paralelas y perpendiculares, una idea esencial para colisiones, físicas y desplazamientos sobre superficies.
Imagina una pelota que golpea una pared inclinada. Su velocidad puede dividirse en una parte paralela a la pared y otra perpendicular. La parte perpendicular determina el impacto; la paralela describe cuánto continúa deslizándose.
La proyección realiza precisamente esa separación. Recibe un vector que queremos analizar y una dirección de referencia sobre la cual mediremos su contribución.
Proyectar v sobre u equivale a iluminar v perpendicularmente hacia la recta que contiene a u. La «sombra» obtenida sobre esa recta es la proyección de v.
La proyección siempre es paralela a u. Puede apuntar en el mismo sentido, en sentido contrario o ser el vector nulo.
La proyección escalar es un número con signo. Indica cuántas unidades de v avanzan en la dirección unitaria de u:
Si u ya está normalizado, |u|=1 y la fórmula se reduce a v·u. Un resultado positivo indica el mismo sentido; uno negativo, sentido opuesto; cero significa perpendicularidad.
La proyección vectorial agrega la dirección a la cantidad anterior. Su fórmula general es:
El cociente es un escalar. Al multiplicarlo por u obtenemos un vector paralelo a la referencia. La división por |u|² hace que el resultado no dependa de la longitud elegida para representar esa dirección.

La línea desde la punta de v hasta la proyección forma 90° con u. Esto permite comprobar visualmente que la diferencia v−proyu(v) es perpendicular a la dirección de referencia.
Sean v=(3,4) y u=(4,1), como en el gráfico anterior. Primero calculamos v·u=16 y |u|²=17:
La componente perpendicular es v−proyu(v)=(−13/17,52/17) ≈ (−0.76,3.06). El producto escalar entre esta componente y u es cero, lo que confirma que ambos vectores son perpendiculares.
Si n es unitario, proyectar resulta más simple:
Esta forma es frecuente en motores gráficos, donde normales de superficies y direcciones importantes se almacenan normalizadas. Aun así, conviene que las funciones generales acepten referencias no normalizadas.
| Producto v·u | Proyección | Interpretación |
|---|---|---|
| > 0 | Mismo sentido que u | v avanza en la dirección de u |
| = 0 | Vector nulo | v es perpendicular a u |
| < 0 | Sentido contrario a u | v retrocede respecto de u |
El vector de referencia u no puede ser nulo porque |u|² aparecería como divisor. Una implementación debe comprobar este caso.
Todo vector v puede separarse respecto de una dirección u en dos componentes:
La primera sigue la dirección de u y la segunda forma 90° con u. Esta descomposición conserva exactamente el vector original.
Modifica v y u. La simulación muestra la proyección en amarillo, la componente perpendicular con una línea discontinua y el signo de la componente escalar.
function proyectar(v, sobre) {
const denominador = sobre.x ** 2 + sobre.y ** 2;
if (denominador === 0) return null;
const factor = (v.x * sobre.x + v.y * sobre.y)
/ denominador;
return {
x: factor * sobre.x,
y: factor * sobre.y
};
}
const v = { x: 3, y: 4 };
const sobre = { x: 4, y: 1 };
const proyeccion = proyectar(v, sobre);
console.log(proyeccion);
// { x: 3.764705882352941, y: 0.9411764705882353 }Al ejecutar el código se muestra la proyección de v sobre sobre: aproximadamente { x: 3.76, y: 0.94 }. La función devuelve null si la dirección base es nula. Otra estrategia válida es lanzar un error o devolver (0,0), pero la decisión debe quedar documentada.
Al tocar la pared, la velocidad se separa en una componente tangencial, que se conserva, y otra normal, que invierte su sentido para producir el rebote.
La proyección convierte una relación geométrica en componentes utilizables por el programa. Permite analizar un movimiento desde el punto de vista de una superficie, un eje local o cualquier dirección relevante.
En el próximo tema estudiaremos ángulos, grados y radianes para expresar orientaciones y giros.