18.1 Referencias globales y locales
Una escena puede usar una referencia global para todos los objetos y, al mismo tiempo, cada vehículo, cámara o mecanismo puede poseer una referencia local. Una orden como «avanzar» se expresa fácilmente en el eje local del vehículo, mientras su posición final debe registrarse en coordenadas globales.
Transformar entre referencias consiste en traducir componentes sin alterar el punto o vector físico descrito.
18.2 Una base rotada en el plano
Para una referencia local girada θ respecto de la global:
e2 = (−sen θ, cos θ)
Estos vectores son unitarios, perpendiculares y expresados en coordenadas globales. Representan los ejes +x′ y +y′ de la referencia local.
18.3 De componentes locales a globales
Un vector local vL = (vx′, vy′) se construye como combinación de la base local:
vy = sen θ·vx′ + cos θ·vy′
function vectorLocalAGlobal(v, grados) {
const t = grados * Math.PI / 180;
const c = Math.cos(t), s = Math.sin(t);
return { x: c * v.x - s * v.y, y: s * v.x + c * v.y };
}
console.log(vectorLocalAGlobal({ x: 4, y: 1 }, 30));18.4 Matriz de rotación
La misma relación puede escribirse con una matriz:
[ sen θ cos θ ]
Las columnas de R son los vectores de la base local expresados globalmente. Multiplicar R por las componentes locales produce las globales.
18.5 Transformar puntos: rotación y traslación
Un punto local también necesita incorporar el origen global o de la referencia:
Primero rotamos la posición local y luego trasladamos. Cambiar el orden produce, en general, otro punto.
function puntoLocalAGlobal(p, referencia) {
const t = referencia.grados * Math.PI / 180;
const c = Math.cos(t), s = Math.sin(t);
return {
x: referencia.origen.x + c * p.x - s * p.y,
y: referencia.origen.y + s * p.x + c * p.y
};
}
console.log(puntoLocalAGlobal({ x: 3, y: 2 }, { origen:{x:5,y:-1}, grados:30 }));18.6 Los vectores no reciben traslación
Un vector libre representa una diferencia entre puntos. Al trasladar ambos extremos, la traslación se cancela. Por eso, para cambiar sus componentes entre referencias solo aplicamos la rotación.
Vectores: vG = R vL
Agregar el origen a una velocidad, fuerza o desplazamiento es un error dimensional y conceptual.
18.7 De global a local
Para invertir la transformación de un punto, primero restamos el origen y luego aplicamos la rotación inversa R(−θ):
En una matriz de rotación ortonormal, la inversa coincide con la transpuesta.
function puntoGlobalALocal(p, referencia) {
const dx = p.x - referencia.origen.x;
const dy = p.y - referencia.origen.y;
const t = referencia.grados * Math.PI / 180;
const c = Math.cos(t), s = Math.sin(t);
return { x: c * dx + s * dy, y: -s * dx + c * dy };
}
console.log(puntoGlobalALocal({ x: 8, y: 3 }, { origen:{x:2,y:1}, grados:45 }));18.8 Recuperar componentes con productos escalares
Como la base local es ortonormal, las componentes locales de un vector global se obtienen proyectándolo sobre los ejes:
vy′ = vG·e2
Estas fórmulas son equivalentes a multiplicar por RT.
18.9 Transformación activa y cambio pasivo
| Interpretación | Qué cambia | Qué se conserva |
|---|---|---|
| Rotación activa | El vector físico gira dentro de una base fija. | Los ejes. |
| Cambio pasivo de base | La base desde la que se describen las componentes. | El vector físico. |
Confundir ambas interpretaciones suele producir un signo angular invertido. Conviene expresar en los nombres si se transforma el objeto o sus coordenadas.
18.10 Composición de transformaciones
Una referencia puede estar anidada dentro de otra: una herramienta respecto de un brazo, el brazo respecto de un robot y el robot respecto del mundo. Para llevar un punto al mundo aplicamos las transformaciones desde la más local hacia la más global.
El orden importa: las transformaciones no son conmutativas.
18.11 Invariantes para comprobar
Una rotación ortonormal conserva módulos, distancias, ángulos y productos escalares. Por lo tanto:
- |Rv| = |v|.
- d(RA, RB) = d(A, B).
- (Ra)·(Rb) = a·b.
- Transformar a global y volver a local recupera los datos iniciales dentro de una tolerancia.
18.12 Aplicaciones
- Convertir controles locales de un vehículo en movimiento global.
- Expresar un objetivo del mundo respecto de una cámara.
- Organizar jerarquías de objetos gráficos.
- Transformar mediciones de sensores instalados con distinta orientación.
- Construir coordenadas relativas entre piezas de un mecanismo.
- Pasar normales y direcciones entre espacios compatibles.
18.13 Laboratorio de referencias
La referencia azul es global; la verde es local. Modificá su origen y rotación, y las coordenadas locales del objeto. Alterná entre punto y vector para observar el efecto de la traslación.
El punto recibe rotación y traslación.
18.14 Representación reusable
Podemos encapsular una referencia y ofrecer métodos diferentes para puntos y vectores:
function crearReferencia(origen, grados) {
const t = grados * Math.PI / 180, c = Math.cos(t), s = Math.sin(t);
return {
puntoAGlobal: p => ({ x: origen.x + c*p.x - s*p.y, y: origen.y + s*p.x + c*p.y }),
vectorAGlobal: v => ({ x: c*v.x - s*v.y, y: s*v.x + c*v.y }),
puntoALocal: p => {
const dx=p.x-origen.x, dy=p.y-origen.y;
return { x:c*dx+s*dy, y:-s*dx+c*dy };
}
};
}
const marco = crearReferencia({x:3,y:1}, 30);
const global = marco.puntoAGlobal({x:2,y:0});
console.log(global, marco.puntoALocal(global));18.15 Extensión a tres dimensiones
En 3D, una base ortonormal utiliza tres ejes y la rotación se representa mediante una matriz 3×3. Una transformación rígida agrega un origen. Los principios se conservan: los puntos reciben rotación y traslación; los vectores libres reciben solamente rotación.
Para composiciones complejas suelen utilizarse matrices homogéneas 4×4 o cuaterniones para las rotaciones, herramientas que requieren un tratamiento específico.
18.16 Errores frecuentes
- Agregar la traslación a velocidades, fuerzas o direcciones.
- Olvidar restar el origen antes de convertir un punto a local.
- Aplicar las transformaciones compuestas en orden inverso.
- Confundir una rotación activa con un cambio pasivo de base.
- Mezclar componentes locales y globales en una suma.
- Usar R en lugar de RT para la transformación inversa.
- No comprobar la ida y vuelta dentro de una tolerancia.
18.17 Ejercicio integrador
Un robot está en el punto global O = (5, 2) m y su referencia local está girada 60°. Un sensor detecta un objetivo en pL = (4, −1) m y una velocidad local vL = (2, 0) m/s.
- Calculá los vectores base locales.
- Transformá el punto objetivo a global.
- Transformá la velocidad a global.
- Explicá por qué solo el punto recibe la traslación.
- Convertí el punto global nuevamente a local.
Ver solución y código
e1 = (0,5; 0,866) y e2 = (−0,866; 0,5). El objetivo global es aproximadamente (7,866; 4,964) m. La velocidad global es (1; 1,732) m/s. La reconversión recupera (4, −1) m.
const origen={x:5,y:2}, grados=60, p={x:4,y:-1}, v={x:2,y:0};
const t=grados*Math.PI/180, c=Math.cos(t), s=Math.sin(t);
const rotar=q=>({x:c*q.x-s*q.y,y:s*q.x+c*q.y});
const rp=rotar(p), objetivo={x:origen.x+rp.x,y:origen.y+rp.y};
const velocidad=rotar(v);
const dx=objetivo.x-origen.x, dy=objetivo.y-origen.y;
const recuperado={x:c*dx+s*dy,y:-s*dx+c*dy};
console.log({objetivo,velocidad,recuperado});18.18 Ideas para recordar
- Una referencia local 2D combina origen y base orientada.
- R(θ) convierte componentes locales de un vector a globales.
- Los puntos reciben rotación y traslación; los vectores libres, solo rotación.
- La transformación inversa resta el origen y aplica R(−θ).
- En bases ortonormales, R−1 = RT.
- Transformaciones activas y cambios pasivos describen operaciones distintas.
- Las rotaciones conservan módulos, distancias y ángulos.
En el próximo tema implementaremos representaciones de vectores con objetos y arreglos en JavaScript.