Transformar una figura significa cambiar la posición de todos sus puntos mediante una regla coherente. Traslación, rotación, escalado y reflexión permiten mover, orientar y redimensionar objetos sin reconstruir su geometría.
Una transformación es una función que recibe un punto P=(x,y) y produce otro P'=(x',y'). Al aplicar la misma función a todos los vértices obtenemos una nueva versión del objeto.
En gráficos 2D estas operaciones controlan sprites, cámaras, interfaces, animaciones, jerarquías y sistemas de coordenadas. Separar la geometría original de su transformación simplifica el programa.
| Transformación | Cambia | Conserva |
|---|---|---|
| Traslación | Posición | Longitudes, ángulos y orientación |
| Rotación | Posición y dirección | Longitudes, ángulos y área |
| Escalado uniforme | Tamaño | Ángulos y proporciones |
| Escalado no uniforme | Tamaño y proporciones | Paralelismo |
| Reflexión | Orientación | Longitudes, ángulos y área |
Traslación, rotación y reflexión son isometrías porque conservan distancias.
Un objeto poligonal se transforma aplicando la regla a cada vértice. Las curvas pueden transformar sus puntos de control o dibujarse dentro de un contexto ya transformado.
Una posición representa un lugar y sí responde a una traslación. Un vector de dirección representa un desplazamiento y no debe recibir esa traslación; solo las partes lineales como rotación y escala.
Una traslación suma el mismo desplazamiento t=(tx,ty) a todos los puntos:
No modifica tamaño, forma ni orientación. Su transformación inversa utiliza (−tx,−ty).
Alrededor del origen y con ángulo θ en radianes:
Una rotación conserva distancias y áreas. Su inversa usa −θ. En pantalla debe considerarse que el eje y crece hacia abajo.
Si sx=sy, el escalado es uniforme. Un factor mayor que 1 amplía; entre 0 y 1 reduce; cero aplasta una dimensión; un valor negativo escala y refleja.
El área se multiplica por |sx·sy|. La inversa existe solo si ambos factores son distintos de cero y utiliza 1/sx,1/sy.
Una reflexión invierte la orientación de los vértices. Aplicar dos veces la misma reflexión devuelve el objeto original.
Rotar o escalar alrededor de un pivote C requiere tres pasos: llevar C al origen, aplicar la operación y devolverlo a su posición:
En coordenadas locales, el objeto se modela alrededor de un origen conveniente. Su transformación lo lleva al espacio global. Esta separación facilita animaciones y jerarquías como brazo-mano o vehículo-rueda.
Varias transformaciones pueden componerse en una sola secuencia. Sin embargo, generalmente no conmutan:
Escalar y luego trasladar deja intacto el vector de traslación; trasladar y luego escalar también escala ese desplazamiento. Por eso el orden debe estar explícito.
Modifica traslación, rotación y escala. El contorno blanco conserva la geometría original; el objeto coloreado muestra el resultado. Cambia el orden para comparar composiciones.
function transformar(p, posicion, escala, angulo) {
const x = p.x * escala.x;
const y = p.y * escala.y;
return {
x: posicion.x + x*Math.cos(angulo) - y*Math.sin(angulo),
y: posicion.y + x*Math.sin(angulo) + y*Math.cos(angulo)
};
}
const figura = [
{ x: 0, y: 0 }, { x: 4, y: 0 }, { x: 2, y: 3 }
];
const posicion = { x: 5, y: 2 };
const escala = { x: 2, y: 1.5 };
const angulo = 30 * Math.PI / 180;
figura.map(p => transformar(p, posicion, escala, angulo))
.forEach((p, i) =>
console.log(`V${i}: (${p.x.toFixed(2)}, ${p.y.toFixed(2)})`)
);Al presionar Ejecutar, se muestran los vértices después de aplicar escala, rotación y traslación, sin depender de un contexto gráfico.
function transformarPunto(p,{pos,escala,angulo}) {
const x=p.x*escala.x;
const y=p.y*escala.y;
const cos=Math.cos(angulo);
const sin=Math.sin(angulo);
return {
x:pos.x+x*cos-y*sin,
y:pos.y+x*sin+y*cos
};
}
const transformacion = {
pos: { x: 3, y: 2 },
escala: { x: 2, y: 0.5 },
angulo: Math.PI / 2
};
const original = { x: 4, y: 2 };
const resultado = transformarPunto(original, transformacion);
console.log(`Original: (${original.x}, ${original.y})`);
console.log(`Transformado: (${resultado.x.toFixed(2)}, ${resultado.y.toFixed(2)})`);Al presionar Ejecutar, se muestra el punto transformado. Esta función aplica escala, luego rotación y finalmente traslación.
Las transformaciones se utilizan en sprites, cámaras, esqueletos, escenas jerárquicas, herramientas de edición, efectos espejo, zoom y adaptación de interfaces.
El torso actúa como nodo padre. Cabeza, hombros, brazos y manos heredan su transformación, mientras cada articulación agrega su propio giro. La escena también aplica zoom de cámara y una reflexión horizontal completa.
Recuerda: cada transformación es una función de puntos; un pivote se maneja trasladando temporalmente al origen; y el orden de aplicación forma parte del resultado.
En el próximo tema estudiaremos en profundidad la traslación de objetos.