Тригонометрия в 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

Микро-сценарии

  1. Плавное колебание элемента в UI.
const offsetY = Math.sin(time) * amplitude;
  1. Расчет направления движения по углу.
const vx = speed * Math.cos(angle);
const vy = speed * Math.sin(angle);
  1. Обратный перевод радиан в градусы для отображения пользователю.
function toDegrees(radians) {
  return (radians * 180) / Math.PI;
}

Типичные ошибки

  • Передавать градусы напрямую в sin/cos/tan.
  • Игнорировать погрешность float-вычислений.
  • Ожидать, что обратные функции вернут градусы.
  • Не проверять диапазон значений для asin/acos.

Краткий итог

  • Тригонометрия в JS строится на методах sin, cos, tan и обратных функциях.
  • Все углы в Math — в радианах.
  • Перевод: degrees * PI / 180.
  • Функции активно применяются в графике и анимации.
  • Для корректных результатов учитывай погрешности вычислений.