Una coordenada adicional permite distinguir puntos de direcciones, integrar traslaciones en matrices y representar proyecciones. La componente w conecta la geometría afín con una visión más amplia del espacio.
En el plano usamos pares (x,y). Sin embargo, una matriz 2×2 solo combina componentes y siempre mantiene fijo el origen; no puede expresar por sí sola una traslación. Las coordenadas homogéneas agregan una tercera componente w y representan el plano dentro de un espacio de tres dimensiones algebraicas.
Esta ampliación no significa que el dibujo deje de ser 2D. Es una herramienta que unifica traslación, rotación, escala, reflexión, cizallamiento y proyección bajo la multiplicación de matrices.
Un punto cartesiano P=(x,y) se representa normalmente como:
El subíndice h recuerda que se trata de una representación homogénea. La elección w=1 permite recuperar directamente las coordenadas cartesianas.
Las ternas proporcionales representan el mismo punto siempre que w no sea cero:
Por ejemplo, (2,3,1), (4,6,2) y (−2,−3,−1) corresponden al mismo punto cartesiano (2,3). Las coordenadas homogéneas describen proporciones, no una terna única.
Para deshomogeneizar dividimos por w:
Así, (10,15,5) vuelve a (2,3). Olvidar esta división es uno de los errores más frecuentes cuando se trabaja con proyecciones.
La componente w separa dos conceptos que suelen escribirse con el mismo par de números:
Una traslación debe mover posiciones, pero no direcciones. El valor de w consigue exactamente ese comportamiento durante la multiplicación matricial.
Al multiplicar T por (x,y,w), obtenemos (x+tx·w, y+ty·w, w). Si w=1 se aplica la traslación; si w=0, desaparece.
Sea la traslación t=(4,−2). Comparemos el punto P=(3,1,1) con el vector v=(3,1,0):
La posición cambia, pero la dirección conserva sus componentes. Esta diferencia evita trasladar normales, velocidades o ejes locales por accidente.
La aritmética de w reproduce relaciones geométricas importantes:
Una combinación de puntos cuyos coeficientes suman 1 mantiene w=1. Es la base de la interpolación afín y baricéntrica.
Para dos puntos A y B, la interpolación lineal es:
Los pesos suman 1, por lo que la componente homogénea también vale 1. Con 0≤t≤1 recorremos el segmento; fuera de ese intervalo recorremos la recta que lo contiene.
Una terna con w=0 no puede deshomogeneizarse mediante división. Se interpreta como una dirección en el infinito. Todas las rectas paralelas comparten el mismo punto ideal.
Esta idea permite que rectas paralelas y rectas que se cortan reciban un tratamiento algebraico común en geometría proyectiva.
Una recta ax+by+c=0 se representa con la terna ℓ=(a,b,c). Un punto homogéneo P=(x,y,w) pertenece a la recta cuando:
El cruce homogéneo de dos puntos produce la recta que los une; el cruce de dos rectas produce su intersección. Si esa intersección tiene w=0, las rectas eran paralelas en el plano cartesiano.
Una transformación afín mantiene la última fila (0,0,1):
Una transformación proyectiva permite valores p y q en la última fila. Entonces W'=px+qy+r puede variar entre puntos y la división final produce perspectiva:
Modifica X, Y y W. El punto naranja representa la posición cartesiana (X/W,Y/W). Al acercarse W a cero, el punto se aleja rápidamente y se convierte en una dirección ideal.
function deshomogeneizar({x, y, w}) {
if (Math.abs(w) < 1e-9) {
return { tipo: "dirección", x, y };
}
return {
tipo: "punto",
x: x / w,
y: y / w
};
}
console.log(deshomogeneizar({x: 10, y: 15, w: 5}));
console.log(deshomogeneizar({x: 3, y: 1, w: 0}));Al ejecutar se muestran un punto cartesiano (2,3) y una dirección ideal. La tolerancia evita dividir por valores numéricamente indistinguibles de cero.
function transformar(M, p) {
return {
x: M[0][0]*p.x + M[0][1]*p.y + M[0][2]*p.w,
y: M[1][0]*p.x + M[1][1]*p.y + M[1][2]*p.w,
w: M[2][0]*p.x + M[2][1]*p.y + M[2][2]*p.w
};
}
const T = [[1,0,4], [0,1,-2], [0,0,1]];
const punto = transformar(T, {x:3,y:1,w:1});
const vector = transformar(T, {x:3,y:1,w:0});
console.log("Punto:", punto); // (7,-1,1)
console.log("Vector:", vector); // (3, 1,0)La misma función procesa puntos y vectores. Es la componente w de cada entrada la que decide si la última columna de la matriz tiene efecto.
function cruz(a, b) {
return {
x: a.y*b.w - a.w*b.y,
y: a.w*b.x - a.x*b.w,
w: a.x*b.y - a.y*b.x
};
}
const r = {x:1,y:-1,w:0}; // x-y=0
const s = {x:0,y:1,w:-2}; // y-2=0
const interseccion = cruz(r, s);
console.log(interseccion); // (2,2,1)Los coeficientes de cada recta se guardan como (a,b,c). Tras dividir por w, la intersección es (2,2).
Una cuadrícula atraviesa un portal que modifica su componente W según la posición horizontal. Tras deshomogeneizar, líneas paralelas convergen y aparece una sensación de profundidad.
Las coordenadas homogéneas se utilizan en cámaras, transformaciones jerárquicas, editores vectoriales, motores gráficos, visión artificial, homografías, mapas, perspectiva, intersecciones y conversión entre sistemas de coordenadas.
Recuerda: w=1 representa posiciones, w=0 representa direcciones ideales, las ternas proporcionales son equivalentes y una transformación proyectiva exige dividir por la componente final.
En el próximo tema aplicaremos estas herramientas a la detección de colisiones entre puntos y figuras.