Rotar un objeto significa girar todos sus puntos el mismo ángulo alrededor de un pivote. La forma y el tamaño permanecen constantes, pero cambian la orientación y, si el pivote es externo, también la posición.
La rotación aparece en ruedas, agujas, torretas, cámaras, sprites, articulaciones y objetos que orbitan. A diferencia de una traslación, el desplazamiento de cada punto depende de su distancia al pivote.
Un punto situado exactamente en el pivote no se mueve. Los puntos más alejados recorren arcos más largos para el mismo ángulo.
En el plano matemático, los ángulos positivos giran normalmente en sentido antihorario. Una vuelta completa equivale a:
Las funciones trigonométricas de JavaScript utilizan radianes. En pantalla, el eje y invertido puede hacer que el sentido visual resulte contrario según la fórmula aplicada.
Para P=(x,y) y ángulo θ:
Con θ=90°, cosθ=0 y senθ=1, por lo que (x,y) se convierte en (−y,x). La inversa utiliza el ángulo −θ.
Para girar alrededor de C=(cx,cy), primero expresamos P respecto de C, rotamos y devolvemos el desplazamiento:
En forma compacta: P'=C+Rθ(P−C). Esta construcción garantiza que C permanezca fijo.
Una figura se rota aplicando la misma regla a cada vértice. Si el objeto guarda geometría local centrada en su propio pivote, basta conservar una posición y un ángulo:
Los puntos locales no se modifican. Esto evita acumular errores al rotar repetidamente los vértices ya transformados.
El determinante de una rotación es 1. Por eso no refleja ni cambia el área.
Al rotar alrededor del centro propio, cambia la orientación pero el centro permanece en su lugar. Con un pivote externo, el centro describe una circunferencia y el objeto parece orbitar.
Una puerta gira alrededor de una bisagra; una rueda suele girar alrededor de su centro; un planeta puede orbitar un centro externo. Elegir el pivote correcto forma parte del modelo.
La velocidad angular ω expresa cambio de ángulo por unidad de tiempo:
Puede medirse en radianes por segundo o grados por segundo, pero debe convertirse antes de usar seno y coseno. Multiplicar por Δt produce una animación independiente de la frecuencia de fotogramas.
Si un objeto en O debe mirar hacia T, calculamos el vector d=T−O:
atan2 devuelve el cuadrante correcto. Si el dibujo original apunta hacia otra dirección, se suma o resta un desplazamiento angular fijo.
Un rectángulo rotado deja de estar alineado con los ejes. Para obtener su AABB se rotan sus cuatro vértices y se calculan mínimos y máximos.
El AABB suele crecer y encoger durante el giro aunque el objeto conserve tamaño. Para colisiones precisas puede utilizarse un OBB.
Modifica el pivote, el ángulo base, la velocidad angular y el tiempo. El contorno blanco es el objeto original; el amarillo es el resultado y el rectángulo coral representa su AABB.
function rotarAlrededor(p,c,angulo) {
const dx=p.x-c.x, dy=p.y-c.y;
const cos=Math.cos(angulo), sin=Math.sin(angulo);
return {
x:c.x+dx*cos-dy*sin,
y:c.y+dx*sin+dy*cos
};
}
const pivote = { x: 2, y: 1 };
const angulo = 90 * Math.PI / 180;
const punto = rotarAlrededor({ x: 6, y: 2 }, pivote, angulo);
const figura = [
{ x: 2, y: 1 }, { x: 6, y: 1 },
{ x: 6, y: 3 }, { x: 2, y: 3 }
];
const figuraRotada = figura.map(p =>
rotarAlrededor(p, pivote, angulo)
);
console.log(`Punto rotado: (${punto.x.toFixed(2)}, ${punto.y.toFixed(2)})`);
figuraRotada.forEach((p, i) =>
console.log(`V${i}: (${p.x.toFixed(2)}, ${p.y.toFixed(2)})`)
);Al presionar Ejecutar, se muestra un punto y los cuatro vértices de una figura rotados 90° alrededor del pivote.
La rotación se utiliza en ruedas, indicadores, armas, cámaras, articulaciones, órbitas, brújulas, partículas y orientación hacia objetivos.
La estación combina una rueda central, brazos articulados, satélites y torretas que apuntan a blancos móviles. Cada pieza conserva su distancia al pivote y utiliza una velocidad angular independiente.
rotate.Recuerda: una rotación conserva distancias; alrededor de C se calcula C+Rθ(P−C); y una animación angular usa θ+=ω·Δt.
En el próximo tema estudiaremos el escalado de objetos.