41. Coordenadas homogéneas

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.

41.1 Introducción

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.

41.2 Del plano a coordenadas homogéneas

Un punto cartesiano P=(x,y) se representa normalmente como:

Ph =xy1

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.

Coordenadas homogéneas aplicadas a gráficos 2D: un punto como posición, un vector como dirección, una matriz de transformación y una cuadrícula proyectada hacia un punto de fuga
La componente homogénea distingue posiciones y direcciones; una matriz 3×3 las transforma y la división por w permite producir una proyección con perspectiva.

41.3 Representaciones equivalentes

Las ternas proporcionales representan el mismo punto siempre que w no sea cero:

(x,y,w) ≡ (kx,ky,kw), con k≠0

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.

41.4 Volver a coordenadas cartesianas

Para deshomogeneizar dividimos por w:

(X,Y,W) → (X/W, Y/W), si W≠0

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.

41.5 Puntos y vectores

La componente w separa dos conceptos que suelen escribirse con el mismo par de números:

Punto:xy1representa una posición
Vector:xy0representa una dirección o desplazamiento

Una traslación debe mover posiciones, pero no direcciones. El valor de w consigue exactamente ese comportamiento durante la multiplicación matricial.

41.6 La traslación dentro de una matriz

T =10tx01ty001

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.

41.7 Ejemplo paso a paso

Sea la traslación t=(4,−2). Comparemos el punto P=(3,1,1) con el vector v=(3,1,0):

T·P=(3+4·1, 1−2·1, 1)=(7,−1,1)
T·v=(3+4·0, 1−2·0, 0)=(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.

41.8 Operaciones entre puntos y vectores

La aritmética de w reproduce relaciones geométricas importantes:

  • Punto − punto = vector, porque 1−1=0.
  • Punto + vector = punto, porque 1+0=1.
  • Vector + vector = vector, porque 0+0=0.
  • Sumar dos puntos produce w=2 y no representa una suma afín directa; al dividir aparece su promedio.

Una combinación de puntos cuyos coeficientes suman 1 mantiene w=1. Es la base de la interpolación afín y baricéntrica.

41.9 Combinaciones afines

Para dos puntos A y B, la interpolación lineal es:

P(t)=(1−t)A+tB

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.

41.10 Puntos en el infinito

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.

(dx,dy,0) describe la dirección (dx,dy)

Esta idea permite que rectas paralelas y rectas que se cortan reciban un tratamiento algebraico común en geometría proyectiva.

41.11 Rectas homogéneas

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:

ℓ·P=ax+by+cw=0

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.

41.12 Transformaciones afines y proyectivas

Una transformación afín mantiene la última fila (0,0,1):

Mafín =actxbdty001

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:

H =actxbdtypqr

41.13 Simulación interactiva: controla w

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.

P PLANO CARTESIANO DESPUÉS DE DIVIDIR POR W
Terna homogénea(4, 2, 2)
Coordenadas cartesianas(2, 1)
Clasificaciónpunto finito

41.14 Implementación básica en JavaScript

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.

41.15 Aplicar una matriz homogénea

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.

41.16 Intersección de rectas en JavaScript

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).

41.17 Aplicación animada: portal proyectivo

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.

W' = 1.00División: (X'/W', Y'/W')Estado: afín

41.18 Aplicaciones, errores y conclusión

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.

  • Olvidar dividir X e Y por W después de una transformación proyectiva.
  • Usar w=1 para una dirección y trasladarla accidentalmente.
  • Intentar deshomogeneizar cuando |W| es cero o extremadamente pequeño.
  • Suponer que (x,y,w) es una representación única y no una clase proporcional.
  • Confundir la terna de un punto con los coeficientes de una recta.
  • Mezclar matrices para vectores fila con matrices para vectores columna.
  • Esperar que una transformación proyectiva conserve paralelismo o proporciones de distancia.

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.