La trigonometría convierte ángulos en posiciones, direcciones, rotaciones, trayectorias y ondas que un programa puede calcular.
La trigonometría aparece con frecuencia en gráficos, videojuegos, simulaciones, interfaces animadas, visualización de datos y geometría computacional.
Su utilidad principal es transformar un ángulo en valores concretos que luego se usan para mover, ubicar, rotar o medir objetos.
En JavaScript, las funciones trigonométricas trabajan con radianes. Por eso conviene tener una función de conversión reutilizable.
function aRadianes(grados) {
return grados * Math.PI / 180;
}
function aGrados(radianes) {
return radianes * 180 / Math.PI;
}
console.log(aRadianes(180));
console.log(aGrados(Math.PI));
Una de las aplicaciones más comunes es obtener una dirección a partir de un ángulo. El coseno indica la componente horizontal y el seno la componente vertical.
function aRadianes(grados) {
return grados * Math.PI / 180;
}
function vectorDesdeAngulo(grados) {
const radianes = aRadianes(grados);
return {
x: Math.cos(radianes),
y: Math.sin(radianes)
};
}
console.log(vectorDesdeAngulo(0));
console.log(vectorDesdeAngulo(90));
console.log(vectorDesdeAngulo(180));
Si se multiplica el vector de dirección por una velocidad, se obtiene el desplazamiento del objeto.
function mover(posicion, grados, velocidad) {
const radianes = grados * Math.PI / 180;
return {
x: posicion.x + Math.cos(radianes) * velocidad,
y: posicion.y + Math.sin(radianes) * velocidad
};
}
const personaje = { x: 50, y: 50 };
console.log(mover(personaje, 0, 10));
console.log(mover(personaje, 45, 10));
console.log(mover(personaje, 90, 10));
En muchos sistemas gráficos el eje Y crece hacia abajo. Si se quiere que 90° apunte hacia arriba, se resta la componente vertical.
function moverEnPantalla(posicion, grados, velocidad) {
const radianes = grados * Math.PI / 180;
return {
x: posicion.x + Math.cos(radianes) * velocidad,
y: posicion.y - Math.sin(radianes) * velocidad
};
}
const nave = { x: 200, y: 200 };
console.log(moverEnPantalla(nave, 0, 20));
console.log(moverEnPantalla(nave, 90, 20));
Con seno y coseno se pueden distribuir objetos sobre una circunferencia, como botones radiales, partículas o puntos de una órbita.
function puntoCircular(centro, radio, grados) {
const radianes = grados * Math.PI / 180;
return {
x: centro.x + Math.cos(radianes) * radio,
y: centro.y + Math.sin(radianes) * radio
};
}
const centro = { x: 100, y: 100 };
console.log(puntoCircular(centro, 50, 0));
console.log(puntoCircular(centro, 50, 90));
console.log(puntoCircular(centro, 50, 180));
Si se divide una vuelta completa entre la cantidad de elementos, se obtiene una distribución circular uniforme.
function puntoCircular(centro, radio, grados) {
const radianes = grados * Math.PI / 180;
return {
x: centro.x + Math.cos(radianes) * radio,
y: centro.y + Math.sin(radianes) * radio
};
}
function distribuirEnCirculo(cantidad, centro, radio) {
const puntos = [];
for (let i = 0; i < cantidad; i++) {
const grados = i * 360 / cantidad;
puntos.push(puntoCircular(centro, radio, grados));
}
return puntos;
}
console.log(distribuirEnCirculo(4, { x: 100, y: 100 }, 40));
console.log(distribuirEnCirculo(8, { x: 100, y: 100 }, 40));
La función Math.atan2 permite obtener el ángulo entre dos puntos. Es muy útil para apuntar, orientar cámaras o dirigir movimientos.
function anguloHacia(origen, destino) {
const dx = destino.x - origen.x;
const dy = destino.y - origen.y;
const radianes = Math.atan2(dy, dx);
return radianes * 180 / Math.PI;
}
console.log(anguloHacia({ x: 0, y: 0 }, { x: 10, y: 0 }));
console.log(anguloHacia({ x: 0, y: 0 }, { x: 0, y: 10 }));
console.log(anguloHacia({ x: 0, y: 0 }, { x: -10, y: 0 }));
Con el ángulo hacia un objetivo se puede construir la velocidad inicial de un proyectil.
function velocidadHacia(origen, destino, rapidez) {
const dx = destino.x - origen.x;
const dy = destino.y - origen.y;
const angulo = Math.atan2(dy, dx);
return {
vx: Math.cos(angulo) * rapidez,
vy: Math.sin(angulo) * rapidez
};
}
console.log(velocidadHacia({ x: 0, y: 0 }, { x: 10, y: 0 }, 5));
console.log(velocidadHacia({ x: 0, y: 0 }, { x: 0, y: 10 }, 5));
La trigonometría también permite rotar coordenadas. Esta operación es básica en gráficos 2D, motores de videojuegos y transformaciones geométricas.
function rotarPunto(punto, grados) {
const radianes = grados * Math.PI / 180;
const coseno = Math.cos(radianes);
const seno = Math.sin(radianes);
return {
x: punto.x * coseno - punto.y * seno,
y: punto.x * seno + punto.y * coseno
};
}
console.log(rotarPunto({ x: 10, y: 0 }, 90));
console.log(rotarPunto({ x: 10, y: 0 }, 180));
Para rotar alrededor de un centro que no está en el origen, primero se traslada el punto, luego se rota y finalmente se vuelve a trasladar.
function rotarPunto(punto, grados) {
const radianes = grados * Math.PI / 180;
const coseno = Math.cos(radianes);
const seno = Math.sin(radianes);
return {
x: punto.x * coseno - punto.y * seno,
y: punto.x * seno + punto.y * coseno
};
}
function rotarAlrededor(punto, centro, grados) {
const trasladado = {
x: punto.x - centro.x,
y: punto.y - centro.y
};
const rotado = rotarPunto(trasladado, grados);
return {
x: centro.x + rotado.x,
y: centro.y + rotado.y
};
}
console.log(rotarAlrededor({ x: 150, y: 100 }, { x: 100, y: 100 }, 90));
El seno permite crear ondas suaves para animaciones, audio, efectos visuales o movimiento repetitivo.
function onda(tiempo, centro, amplitud, periodo) {
const fase = tiempo / periodo * 2 * Math.PI;
return centro + Math.sin(fase) * amplitud;
}
console.log(onda(0, 100, 20, 4));
console.log(onda(1, 100, 20, 4));
console.log(onda(2, 100, 20, 4));
console.log(onda(4, 100, 20, 4));
Una vibración puede representarse con una onda de poca amplitud y frecuencia alta.
function vibracion(tiempo, intensidad) {
const frecuencia = 30;
return Math.sin(tiempo * frecuencia) * intensidad;
}
console.log(vibracion(0.00, 5));
console.log(vibracion(0.05, 5));
console.log(vibracion(0.10, 5));
Aunque la distancia se apoya en el teorema de Pitágoras, se usa junto con trigonometría para resolver muchos problemas de movimiento y colisión.
function distancia(a, b) {
const dx = b.x - a.x;
const dy = b.y - a.y;
return Math.sqrt(dx * dx + dy * dy);
}
console.log(distancia({ x: 0, y: 0 }, { x: 3, y: 4 }));
console.log(distancia({ x: 10, y: 10 }, { x: 13, y: 14 }));
Normalizar un vector significa convertirlo en un vector de longitud 1. Esto permite mover objetos con velocidad constante sin importar la distancia al objetivo.
function normalizar(vector) {
const longitud = Math.sqrt(vector.x * vector.x + vector.y * vector.y);
if (longitud === 0) {
return { x: 0, y: 0 };
}
return {
x: vector.x / longitud,
y: vector.y / longitud
};
}
console.log(normalizar({ x: 3, y: 4 }));
console.log(normalizar({ x: 10, y: 0 }));
Combinando resta de puntos, normalización y velocidad se puede mover un objeto hacia otro.
function normalizar(vector) {
const longitud = Math.sqrt(vector.x * vector.x + vector.y * vector.y);
if (longitud === 0) {
return { x: 0, y: 0 };
}
return {
x: vector.x / longitud,
y: vector.y / longitud
};
}
function avanzarHacia(posicion, objetivo, velocidad) {
const direccion = normalizar({
x: objetivo.x - posicion.x,
y: objetivo.y - posicion.y
});
return {
x: posicion.x + direccion.x * velocidad,
y: posicion.y + direccion.y * velocidad
};
}
console.log(avanzarHacia({ x: 0, y: 0 }, { x: 30, y: 40 }, 10));
La trigonometría es una herramienta práctica para transformar ideas geométricas en algoritmos. Permite mover objetos, calcular direcciones, rotar puntos, apuntar hacia objetivos y generar movimientos suaves con pocas líneas de código.