Learn JavaScript

Math.tan() - метод для вычисления тангенса угла в JavaScript

Math.tan() вычисляет тангенс угла.

Главное, что нужно запомнить сразу: метод принимает угол не в градусах, а в радианах.

Синтаксис

Math.tan(x)

x - угол в радианах.

Что делает Math.tan()

Метод возвращает тангенс переданного угла.

console.log(Math.tan(0));           // 0
console.log(Math.tan(Math.PI / 4)); // 0.9999999999999999
console.log(Math.tan(Math.PI / 3)); // 1.7320508075688767

Это значит:

  • Math.tan(0) равно 0
  • Math.tan(Math.PI / 4) примерно равно 1
  • Math.tan(Math.PI / 3) примерно равно 1.732

Что возвращает Math.tan()

Math.tan() возвращает число типа number.

const result = Math.tan(Math.PI / 6);

console.log(result);        // 0.5773502691896257
console.log(typeof result); // "number"

В отличие от Math.sin() и Math.cos(), результат Math.tan() не ограничен диапазоном от -1 до 1.

Метод работает в радианах

Это самый важный момент при работе с Math.tan().

console.log(Math.tan(Math.PI / 4)); // 0.9999999999999999

Если передать в метод 45, JavaScript воспримет это как 45 радиан, а не 45 градусов.

console.log(Math.tan(45)); // 1.6197751905438615

Поэтому градусы нужно переводить в радианы.

Как перевести градусы в радианы

Формула такая:

радианы = градусы * Math.PI / 180

Пример:

const angle = 45;
const radians = angle * Math.PI / 180;

console.log(Math.tan(radians)); // 0.9999999999999999

Ещё пример:

const angle = 60;
const radians = angle * Math.PI / 180;

console.log(Math.tan(radians)); // 1.7320508075688767

Популярные значения

Несколько значений удобно знать наизусть.

console.log(Math.tan(0));           // 0
console.log(Math.tan(Math.PI / 6)); // 0.5773502691896257
console.log(Math.tan(Math.PI / 4)); // 0.9999999999999999
console.log(Math.tan(Math.PI / 3)); // 1.7320508075688767

Это примерно соответствует:

  • tan(0) = 0
  • tan(30°) = 0.577...
  • tan(45°) = 1
  • tan(60°) = 1.732...

Math.tan() связан с Math.sin() и Math.cos()

Тангенс можно представить через синус и косинус.

tan(x) = sin(x) / cos(x)

Пример:

console.log(Math.tan(Math.PI / 4)); // 0.9999999999999999
console.log(Math.sin(Math.PI / 4) / Math.cos(Math.PI / 4)); // 0.9999999999999999

Именно поэтому около точек, где Math.cos(x) близок к нулю, результат Math.tan(x) становится очень большим.

Положительные и отрицательные углы

Math.tan() умеет работать и с отрицательными углами.

console.log(Math.tan(Math.PI / 4));  // 0.9999999999999999
console.log(Math.tan(-Math.PI / 4)); // -0.9999999999999999

Это нормальное поведение: знак результата меняется вместе со знаком угла.

Что происходит около Math.PI / 2

Это один из самых важных моментов для тангенса.

console.log(Math.tan(Math.PI / 2)); // 16331239353195370

Математически тангенс в точке π / 2 не определён, потому что косинус там равен нулю.

Но в JavaScript из-за особенностей чисел с плавающей точкой вы обычно увидите не Infinity, а очень большое число.

То же самое видно рядом с этой точкой:

console.log(Math.tan(89 * Math.PI / 180));   // 57.289961630759876
console.log(Math.tan(89.9 * Math.PI / 180)); // 572.9572133543032
console.log(Math.tan(91 * Math.PI / 180));   // -57.28996163075955

Чем ближе угол к 90°, тем больше по модулю становится результат.

Почему Math.tan(Math.PI) не равно ровно 0

Иногда кажется, что здесь должен быть точный ноль, но в JavaScript используются числа с плавающей точкой.

console.log(Math.tan(Math.PI)); // -1.2246467991473532e-16

Это очень маленькое число, практически равное нулю.

Без аргумента

Если вызвать Math.tan() без аргумента, результатом будет NaN.

console.log(Math.tan()); // NaN

Так происходит потому, что метод попытается обработать undefined как число.

Неявное приведение типов

Math.tan() сначала пытается привести аргумент к числу.

console.log(Math.tan("1"));       // 1.5574077246549023
console.log(Math.tan(null));      // 0
console.log(Math.tan(true));      // 1.5574077246549023
console.log(Math.tan(undefined)); // NaN

На практике лучше передавать в метод уже готовое число.

NaN и Infinity

Для специальных значений результат будет таким:

console.log(Math.tan(NaN));       // NaN
console.log(Math.tan(Infinity));  // NaN
console.log(Math.tan(-Infinity)); // NaN

Это полезно помнить:

  • NaN даёт NaN
  • Infinity даёт NaN
  • -Infinity даёт NaN

Число не меняется

Math.tan() не изменяет исходное значение. Он только возвращает новый результат.

const angle = Math.PI / 4;
const result = Math.tan(angle);

console.log(angle);  // 0.7853981633974483
console.log(result); // 0.9999999999999999

Когда это полезно

Math.tan() часто используют, когда:

  • нужно работать с углами и наклоном
  • вы рассчитываете отношение вертикального изменения к горизонтальному
  • пишете графику, игры или геометрические вычисления
  • нужно найти уклон линии или траектории

Пример с углом наклона:

const angle = 30 * Math.PI / 180;
const slope = Math.tan(angle);

console.log(slope); // 0.5773502691896257

Частые ошибки

Передавать градусы вместо радиан

console.log(Math.tan(45)); // 1.6197751905438615

Такой результат получается потому, что 45 здесь считается радианами.

Правильно так:

console.log(Math.tan(45 * Math.PI / 180)); // 0.9999999999999999

Ожидать, что Math.tan(Math.PI / 2) даст Infinity

console.log(Math.tan(Math.PI / 2)); // 16331239353195370

Математически тангенс в этой точке не определён, но в JavaScript вы обычно увидите очень большое число из-за погрешности представления.

Ожидать, что Math.tan(Math.PI / 4) даст ровно 1

console.log(Math.tan(Math.PI / 4)); // 0.9999999999999999

Это обычная погрешность вычислений с дробными числами.

Быстрая памятка

  • Math.tan(x) вычисляет тангенс угла
  • аргумент должен быть в радианах
  • метод возвращает number
  • результат не ограничен диапазоном от -1 до 1
  • Math.tan(0) равно 0
  • Math.tan(Math.PI / 4) примерно равно 1
  • около Math.PI / 2 результат становится очень большим по модулю
  • градусы нужно переводить в радианы через angle * Math.PI / 180

Коротко

Math.tan() - это стандартный способ вычислить тангенс угла в JavaScript. Главное, что нужно запомнить: метод работает в радианах, а около π / 2 результат становится очень большим, потому что тангенс в этой области математически не определён и JavaScript показывает приближённое значение.