Learn JavaScript

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

Math.acos() вычисляет арккосинус числа.

Проще всего запомнить так: Math.acos(x) отвечает на вопрос, какой угол имеет косинус x.

Главный нюанс: аргумент должен быть в диапазоне от -1 до 1, а результат метод возвращает в радианах.

Синтаксис

Math.acos(x)

x - число, для которого нужно найти арккосинус.

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

Метод возвращает угол, косинус которого равен переданному числу.

console.log(Math.acos(1));   // 0
console.log(Math.acos(0));   // 1.5707963267948966
console.log(Math.acos(-1));  // 3.141592653589793

Это значит:

  • Math.acos(1) равно 0
  • Math.acos(0) равно π / 2
  • Math.acos(-1) равно π

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

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

const result = Math.acos(0.5);

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

Результат всегда находится в диапазоне от 0 до Math.PI.

Аргумент должен быть от -1 до 1

Это самое важное ограничение у Math.acos().

console.log(Math.acos(1));    // 0
console.log(Math.acos(0.5));  // 1.0471975511965979
console.log(Math.acos(-0.5)); // 2.0943951023931957

Если значение выходит за пределы диапазона -1...1, результатом будет NaN.

console.log(Math.acos(2));  // NaN
console.log(Math.acos(-2)); // NaN

Это логично, потому что косинус обычного угла не может быть больше 1 или меньше -1.

Результат возвращается в радианах

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

console.log(Math.acos(0.5)); // 1.0471975511965979

Это не 1.04 градуса и не 60 градусов, а угол в радианах.

Если нужно перевести результат в градусы, используйте формулу:

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

Пример:

const radians = Math.acos(0.5);
const degrees = radians * 180 / Math.PI;

console.log(degrees); // 60.00000000000001

Ещё пример:

console.log(Math.acos(0) * 180 / Math.PI);   // 90
console.log(Math.acos(-1) * 180 / Math.PI);  // 180

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

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

console.log(Math.acos(1));   // 0
console.log(Math.acos(0.5)); // 1.0471975511965979
console.log(Math.acos(0));   // 1.5707963267948966
console.log(Math.acos(-1));  // 3.141592653589793

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

  • acos(1) =
  • acos(0.5) = 60°
  • acos(0) = 90°
  • acos(-1) = 180°

Диапазон результата

Даже если одинаковый косинус можно получить у разных углов, Math.acos() возвращает только один основной результат.

Он всегда находится в диапазоне:

0 ... Math.PI

То есть примерно от до 180°.

Math.acos() и Math.cos()

Эти методы связаны как обратные операции, но не для любого угла.

console.log(Math.acos(Math.cos(0)));         // 0
console.log(Math.acos(Math.cos(Math.PI / 3))); // 1.0471975511965976
console.log(Math.acos(Math.cos(Math.PI)));   // 3.141592653589793

В этих примерах всё выглядит как полное обратное преобразование.

Но не всегда:

console.log(Math.acos(Math.cos(2 * Math.PI))); // 0

Здесь результат равен 0, а не 2 * Math.PI.

Так происходит потому, что Math.acos() всегда возвращает угол только из диапазона от 0 до π.

Math.acos() и Math.asin()

Оба метода относятся к обратным тригонометрическим функциям, но возвращают разные углы.

console.log(Math.acos(0.5)); // 1.0471975511965979
console.log(Math.asin(0.5)); // 0.5235987755982989
  • Math.acos(x) ищет угол по косинусу
  • Math.asin(x) ищет угол по синусу

Из-за этого диапазон результата у них тоже разный.

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

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

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

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

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

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

console.log(Math.acos("0.5"));     // 1.0471975511965979
console.log(Math.acos(null));      // 1.5707963267948966
console.log(Math.acos(true));      // 0
console.log(Math.acos(undefined)); // NaN

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

NaN и Infinity

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

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

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

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

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

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

const value = 0.5;
const result = Math.acos(value);

console.log(value);  // 0.5
console.log(result); // 1.0471975511965979

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

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

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

Пример:

const cosValue = 0.5;
const angle = Math.acos(cosValue);

console.log(angle); // 1.0471975511965979

Если нужны градусы:

console.log(angle * 180 / Math.PI); // 60.00000000000001

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

Передавать в Math.acos() угол, а не значение косинуса

console.log(Math.acos(60)); // NaN

Math.acos() принимает не градусы и не радианы, а число от -1 до 1.

Ожидать результат в градусах

console.log(Math.acos(0.5)); // 1.0471975511965979

Это радианы. Если нужны градусы, переводите отдельно.

Думать, что Math.acos(Math.cos(x)) всегда равно x

console.log(Math.acos(Math.cos(2 * Math.PI))); // 0

Math.acos() возвращает только основной угол из диапазона 0 ... π.

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

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

Коротко

Math.acos() - это стандартный способ вычислить арккосинус числа в JavaScript. Главное, что нужно запомнить: метод принимает значение косинуса от -1 до 1, а возвращает угол в радианах из диапазона 0 ... π.