Тригонометрия в JavaScript
Тригонометрия в JavaScript
Технический фундамент работы с углами
В тригонометрии JS ключевая техническая деталь это единицы измерения:
- методы
Math.sin/cos/tanпринимают только радианы; - пользовательские интерфейсы чаще работают в градусах;
- значит почти всегда нужен явный переход между системами.
Инженерное правило: хранить угол в одном формате внутри вычислений и конвертировать только на границе ввода/вывода.
Где тригонометрия реально нужна в коде
Тригонометрия в JavaScript нужна не только для учебных задач. Она используется в анимации по окружности, поворотах элементов, 2D/3D-графике, расчетах координат, сигнальных графиках, игровых механиках.
Ключевой момент: методы Math.sin, Math.cos, Math.tan принимают угол в радианах, а не в градусах.
Базовые тригонометрические функции
console.log(Math.sin(Math.PI / 2)); // 1
console.log(Math.cos(0)); // 1
console.log(Math.tan(Math.PI / 4)); // ~1
Новый термин: радиан — единица измерения угла. Math.PI радиан = 180°.
Перевод градусов в радианы
function toRadians(degrees) {
return (degrees * Math.PI) / 180;
}
console.log(Math.sin(toRadians(30))); // ~0.5
Здесь часто путаются: если передать 30 напрямую в Math.sin(30), получится не «синус 30°», а синус 30 радиан.
Проверь себя: как перевести 90° в радианы?
Обратные функции
console.log(Math.asin(1)); // PI / 2
console.log(Math.acos(1)); // 0
console.log(Math.atan(1)); // PI / 4
Они возвращают угол (в радианах) по значению функции.
Смотри, что важно: для практических задач «найти угол по вектору» чаще используют Math.atan2(y, x). Он учитывает четверть и корректно работает, даже когда x = 0.
console.log(Math.atan2(1, 1)); // PI / 4
console.log(Math.atan2(1, 0)); // PI / 2
console.log(Math.atan2(0, -1)); // PI
Микро-паттерн: угол направления от точки A к точке B:
function getAngle(x1, y1, x2, y2) {
return Math.atan2(y2 - y1, x2 - x1); // радианы
}
Практический пример: точка на окружности
function getPoint(radius, degrees) {
const angle = toRadians(degrees);
return {
x: radius * Math.cos(angle),
y: radius * Math.sin(angle),
};
}
console.log(getPoint(100, 45));
Такой паттерн используется для анимации маркеров и движения объектов по кругу.
Edge cases и точность
console.log(Math.tan(Math.PI / 2));
Результат будет очень большим числом, а не «идеальной бесконечностью». Это нормально из-за ограничений вычислений с плавающей точкой.
Еще один важный edge case: Math.asin и Math.acos определены только для значений от -1 до 1. Если значение выйдет за диапазон, будет NaN.
console.log(Math.asin(2)); // NaN
Микро-сценарии
- Плавное колебание элемента в UI.
const offsetY = Math.sin(time) * amplitude;
- Расчет направления движения по углу.
const vx = speed * Math.cos(angle);
const vy = speed * Math.sin(angle);
- Обратный перевод радиан в градусы для отображения пользователю.
function toDegrees(radians) {
return (radians * 180) / Math.PI;
}
Типичные ошибки
- Передавать градусы напрямую в
sin/cos/tan. - Игнорировать погрешность float-вычислений.
- Ожидать, что обратные функции вернут градусы.
- Не проверять диапазон значений для
asin/acos.
Краткий итог
- Тригонометрия в JS строится на методах
sin,cos,tanи обратных функциях. - Все углы в
Math— в радианах. - Перевод:
degrees * PI / 180. - Функции активно применяются в графике и анимации.
- Для корректных результатов учитывай погрешности вычислений.