Los vectores de dos y tres componentes permiten representar desplazamientos, direcciones, velocidades y posiciones. Sus coordenadas conectan la geometría con estructuras simples de programación.
Un vector posee magnitud, dirección y sentido. En el plano se representa mediante dos componentes y en el espacio mediante tres.
Geométricamente suele dibujarse como una flecha. Algebraicamente se expresa como una lista ordenada de números, lo que facilita almacenarlo y procesarlo en un programa.
Un punto indica una posición. Un vector describe un desplazamiento o una dirección. Ambos pueden usar las mismas coordenadas, pero su significado es diferente.
| Objeto | Interpretación | Ejemplo |
|---|---|---|
| Punto P = (3, 2) | Ubicación respecto del origen | Posición de un personaje |
| Vector v = (3, 2) | Desplazamiento: 3 a la derecha y 2 hacia arriba | Movimiento del personaje |
Esta distinción conceptual evita aplicar operaciones sin interpretar qué representa el resultado.
Las componentes indican cuánto avanza el vector sobre cada eje. Su orden es esencial:
const v = [4, -2];
const [vx, vy] = v;
console.log({ vx, vy }); // { vx: 4, vy: -2 }
Un vector de ℝ2 puede visualizarse como una flecha en el plano cartesiano. Su componente x describe el desplazamiento horizontal y su componente y, el vertical.
| Vector | Desplazamiento |
|---|---|
| (3, 2) | 3 a la derecha y 2 hacia arriba |
| (−4, 1) | 4 a la izquierda y 1 hacia arriba |
| (0, −5) | Sin movimiento horizontal y 5 hacia abajo |
| (0, 0) | Ningún desplazamiento |
El vector que comienza en el origen O = (0, 0) y termina en un punto P = (x, y) se denomina vector de posición de P.
const origen = [0, 0];
const punto = [5, -3];
const vectorPosicion = punto.map((valor, i) => valor - origen[i]);
console.log(vectorPosicion); // [5, -3]
Por eso las coordenadas de un punto y las del vector que va desde el origen hasta él coinciden numéricamente.
Si A = (ax, ay) es el punto inicial y B = (bx, by) el final, el vector que va de A a B es:
function vectorEntre(origen, destino) {
if (origen.length !== destino.length) throw new Error("Dimensiones diferentes");
return destino.map((valor, i) => valor - origen[i]);
}
console.log(vectorEntre([2, 1], [7, 4])); // [5, 3]
Invertir los puntos produce BA = −AB.
Si un vector v se aplica desde un punto A, el extremo B se obtiene sumando sus componentes:
function desplazar(punto, vector) {
return punto.map((coordenada, i) => coordenada + vector[i]);
}
const inicio = [2, 1];
const movimiento = [5, 3];
console.log(desplazar(inicio, movimiento)); // [7, 4]
Esta operación es habitual al actualizar posiciones en animaciones y videojuegos.
Un vector libre no está ligado a una posición particular. Dos flechas representan el mismo vector si tienen las mismas componentes, aunque comiencen en puntos diferentes.
const iguales = (u, v, tolerancia = 1e-10) =>
u.length === v.length &&
u.every((valor, i) => Math.abs(valor - v[i]) < tolerancia);
const AB = [3, 2];
const CD = [3, 2];
console.log(iguales(AB, CD)); // true
En ℝ3 se agrega un tercer eje perpendicular a los ejes x e y. Un vector v = (vx, vy, vz) describe un desplazamiento tridimensional.
El significado visual de cada eje depende del sistema de coordenadas utilizado por la aplicación.
La fórmula se extiende componente a componente:
const A = [1, -2, 3];
const B = [5, 1, -1];
const AB = B.map((coordenada, i) => coordenada - A[i]);
console.log(AB); // [4, 3, -4]
Los vectores canónicos apuntan en la dirección positiva de cada eje:
Cualquier vector (x, y, z) puede escribirse como x e1 + y e2 + z e3.
const e1 = [1, 0, 0];
const e2 = [0, 1, 0];
const e3 = [0, 0, 1];
const componentes = [4, -2, 5];
const v = e1.map((_, i) =>
componentes[0] * e1[i] + componentes[1] * e2[i] + componentes[2] * e3[i]
);
console.log(v); // [4, -2, 5]
Las componentes de un vector dependen de los ejes elegidos. En matemáticas suele usarse x hacia la derecha e y hacia arriba. En muchas interfaces gráficas, y crece hacia abajo.
| Contexto | Eje x | Eje y | Eje z |
|---|---|---|---|
| Plano cartesiano | Derecha | Arriba | No se usa |
| Pantalla 2D frecuente | Derecha | Abajo | No se usa |
| Motor 3D | Depende de la convención del motor | ||
Antes de programar transformaciones conviene documentar la orientación y las unidades de cada eje.
Para dibujar un punto cartesiano en una pantalla con origen visual (ox, oy), se traslada el origen y se invierte el eje y.
function aPantalla([x, y], [origenX, origenY], escala = 1) {
return [origenX + x * escala, origenY - y * escala];
}
console.log(aPantalla([3, 2], [400, 300], 20)); // [460, 260]
La escala convierte las unidades matemáticas en píxeles.
Una recta puede describirse con un punto inicial p0 y un vector director v:
La misma expresión funciona en ℝ2 y ℝ3.
function puntoEnRecta(origen, direccion, t) {
return origen.map((coordenada, i) => coordenada + t * direccion[i]);
}
console.log(puntoEnRecta([1, 2, 3], [2, 0, -1], 4)); // [9, 2, -1]
Un plano en ℝ3 puede describirse usando un punto p0 y dos vectores directores no paralelos u y v:
function puntoEnPlano(origen, u, v, s, t) {
return origen.map(
(coordenada, i) => coordenada + s * u[i] + t * v[i]
);
}
const origen = [0, 0, 1];
console.log(puntoEnPlano(origen, [1, 0, 0], [0, 1, 0], 3, -2));
// [3, -2, 1]
Los arreglos facilitan los algoritmos genéricos; los objetos con propiedades nombradas pueden resultar más legibles en código específicamente 2D o 3D.
const comoArreglo = [3, -1, 5];
const comoObjeto = { x: 3, y: -1, z: 5 };
function objetoAArreglo({ x, y, z }) {
return [x, y, z];
}
console.log(objetoAArreglo(comoObjeto));
console.log(comoArreglo);
Una aplicación debe adoptar una convención uniforme para evitar conversiones y errores innecesarios.
Antes de operar conviene comprobar la dimensión y que todas las componentes sean números finitos.
function esVector(vector, dimension) {
return Array.isArray(vector) &&
vector.length === dimension &&
vector.every(Number.isFinite);
}
console.log(esVector([1, 2], 2)); // true
console.log(esVector([1, NaN, 3], 3)); // false
console.log(esVector([1, 2, 3], 2)); // false
Los vectores 2D y 3D aparecen en gráficos, videojuegos, robótica, física, mapas, animación, modelado y visión por computadora.
Errores habituales:
Las coordenadas convierten direcciones y desplazamientos geométricos en datos que un programa puede manipular. El mismo razonamiento funciona en el plano, en el espacio y, de forma abstracta, en dimensiones mayores.
En el próximo tema estudiaremos las operaciones con vectores y su interpretación algebraica y geométrica.