Rotar un punto cambia su orientación respecto del origen sin modificar su distancia. Seno y coseno permiten calcular exactamente sus nuevas coordenadas.
Una rotación mueve un punto a lo largo de una circunferencia centrada en el origen. El punto cambia de coordenadas, pero conserva la distancia a (0,0).
Esta operación es la base para girar vértices, figuras, sprites, direcciones y sistemas de coordenadas completos.
En convención matemática, θ positivo gira en sentido antihorario y θ negativo en sentido horario.
Las nuevas coordenadas se calculan combinando las componentes originales con seno y coseno:
El mismo ángulo debe usarse en ambas expresiones y debe estar en radianes al llamar a las funciones de JavaScript.
Un punto puede escribirse como P=(r cos α,r sen α), donde r es su distancia al origen y α su orientación. Después de girar θ, la nueva orientación es α+θ.
Al desarrollar cos(α+θ) y sen(α+θ) mediante identidades trigonométricas aparecen exactamente las fórmulas de rotación. Por eso conservan r y solo modifican el ángulo.

Para P=(4,2) y θ=90°, cos θ=0 y sen θ=1:
Esta rotación permite recordar una regla especial: en 90° antihorario, (x,y) se transforma en (−y,x).
| Ángulo | Transformación |
|---|---|
| 0° | (x,y) |
| 90° | (−y,x) |
| 180° | (−x,−y) |
| 270° | (y,−x) |
| 360° | (x,y) |
Estas reglas son atajos exactos; para cualquier otro ángulo utilizamos la fórmula general.
Las dos fórmulas pueden agruparse en una matriz:
La matriz organiza la operación y permite combinar la rotación con otras transformaciones geométricas.
Modifica P y θ. La circunferencia confirma que el radio permanece constante y el arco muestra el sentido del giro.
function rotarEnOrigen(punto, grados) {
const angulo = grados * Math.PI / 180;
const cos = Math.cos(angulo);
const sen = Math.sin(angulo);
return {
x: punto.x * cos - punto.y * sen,
y: punto.x * sen + punto.y * cos
};
}
const punto = { x: 4, y: 2 };
const puntoRotado = rotarEnOrigen(punto, 90);
console.log(`Punto original: (${punto.x}, ${punto.y})`);
console.log(`Punto rotado: (${puntoRotado.x.toFixed(2)}, ${puntoRotado.y.toFixed(2)})`);Al presionar Ejecutar, la llamada gira el punto (4,2) 90° y muestra como resultado (−2,4). Conviene devolver un punto nuevo para conservar el original.
Una figura poligonal se representa mediante varios vértices. Para girarla alrededor del origen aplicamos la misma función a cada punto.
function rotarEnOrigen(punto, grados) {
const radianes = grados * Math.PI / 180;
const cos = Math.cos(radianes);
const sen = Math.sin(radianes);
return {
x: punto.x * cos - punto.y * sen,
y: punto.x * sen + punto.y * cos
};
}
const vertices = [
{ x: 0, y: 0 },
{ x: 4, y: 0 },
{ x: 2, y: 3 }
];
const angulo = 90;
const verticesRotados = vertices.map(
punto => rotarEnOrigen(punto, angulo)
);
verticesRotados.forEach((punto, indice) => {
console.log(
`Vértice ${indice + 1}: (${punto.x.toFixed(2)}, ${punto.y.toFixed(2)})`
);
});Al presionar Ejecutar, se muestran los tres vértices después de rotar el triángulo 90°. Las relaciones entre ellos se conservan, de modo que el polígono mantiene forma y tamaño.
La rotación de puntos se utiliza para orientar sprites, girar polígonos, mover piezas mecánicas, construir efectos radiales y transformar figuras completas sin alterar su forma ni su tamaño.
En cada cuadro se aplica la misma matriz de rotación a todos los vértices. El contorno discontinuo representa la figura original y permite comprobar que las distancias al origen se conservan.
En Canvas el eje y está invertido. Podemos convertir entre sistemas o adaptar el signo del ángulo. También ctx.rotate trabaja en radianes y gira el sistema de dibujo.
Rotar alrededor del origen es la forma fundamental de giro 2D. Una vez comprendida, podremos trasladar temporalmente cualquier centro al origen y rotar alrededor de puntos arbitrarios.
Ese será el contenido del próximo tema.