Math.atan2()
Базовый уровень Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в различных версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Статический метод Math.atan2() возвращает угол в плоскости (в радианах) между положительной осью x и лучом, идущим от (0, 0) к точке (x, y), для Math.atan2(y, x).
Попробуйте
function calcAngleDegrees(x, y) {
return (Math.atan2(y, x) * 180) / Math.PI;
}
console.log(calcAngleDegrees(5, 5));
// Expected output: 45
console.log(calcAngleDegrees(10, 10));
// Expected output: 45
console.log(calcAngleDegrees(0, 10));
// Expected output: 90
Синтаксис
Math.atan2(y, x)
Параметры
-
y - Y-координата точки.
-
x - X-координата точки.
Возвращаемое значение
Угол в радианах (включительно от -π до π) между положительной осью x и лучом, идущим от (0, 0) к точке (x, y).
Описание
Метод Math.atan2() измеряет угол θ, против часовой стрелки, в радианах, между положительной осью x и точкой (x, y). Обратите внимание, что аргументы этой функции передают сначала Y-координату, а затем X-координату.

Math.atan2() передаются отдельные аргументы x и y, в то время как Math.atan() передается отношение этих двух аргументов. Math.atan2(y, x) отличается от Math.atan(y / x) в следующих случаях:
x | y | Math.atan2(y, x) | Math.atan(y / x) |
|---|---|---|---|
Infinity | Infinity | π / 4 | NaN |
Infinity | -Infinity | -π / 4 | NaN |
-Infinity | Infinity | 3π / 4 | NaN |
-Infinity | -Infinity | -3π / 4 | NaN |
| 0 | 0 | 0 | NaN |
| 0 | -0 | -0 | NaN |
< 0 (including -0) | 0 | π | 0 |
< 0 (including -0) | -0 | -π | 0 |
-Infinity | > 0 | π | -0 |
| -0 | > 0 | π / 2 | -π / 2 |
-Infinity | < 0 | -π | 0 |
| -0 | < 0 | -π / 2 | π / 2 |
Кроме того, для точек во втором и третьем квадрантах (x < 0), Math.atan2() выдавал бы угол, меньший или больший .
Поскольку atan2() является статическим методом Math, вы всегда используете его как Math.atan2(), а не как метод объекта Math, который вы создали (Math не является конструктором).
Примеры
Использование Math.atan2()
Math.atan2(90, 15); // 1.4056476493802699 Math.atan2(15, 90); // 0.16514867741462683
Разница между Math.atan2(y, x) и Math.atan(y / x)
Следующий скрипт выводит все входные данные, которые приводят к разнице между Math.atan2(y, x) и Math.atan(y / x).
const formattedNumbers = new Map([
[-Math.PI, "-π"],
[(-3 * Math.PI) / 4, "-3π/4"],
[-Math.PI / 2, "-π/2"],
[-Math.PI / 4, "-π/4"],
[Math.PI / 4, "π/4"],
[Math.PI / 2, "π/2"],
[(3 * Math.PI) / 4, "3π/4"],
[Math.PI, "π"],
[-Infinity, "-∞"],
[Infinity, "∞"],
]);
function format(template, ...args) {
return String.raw(
{ raw: template },
...args.map((num) =>
(Object.is(num, -0)
? "-0"
: (formattedNumbers.get(num) ?? String(num))
).padEnd(5),
),
);
}
console.log(`| x | y | atan2 | atan |
|-------|-------|-------|-------|`);
for (const x of [-Infinity, -1, -0, 0, 1, Infinity]) {
for (const y of [-Infinity, -1, -0, 0, 1, Infinity]) {
const atan2 = Math.atan2(y, x);
const atan = Math.atan(y / x);
if (!Object.is(atan2, atan)) {
console.log(format`| ${x} | ${y} | ${atan2} | ${atan} |`);
}
}
}
Вывод:
| x | y | atan2 | atan | |-------|-------|-------|-------| | -∞ | -∞ | -3π/4 | NaN | | -∞ | -1 | -π | 0 | | -∞ | -0 | -π | 0 | | -∞ | 0 | π | -0 | | -∞ | 1 | π | -0 | | -∞ | ∞ | 3π/4 | NaN | | -1 | -∞ | -π/2 | π/2 | | -1 | -1 | -3π/4 | π/4 | | -1 | -0 | -π | 0 | | -1 | 0 | π | -0 | | -1 | 1 | 3π/4 | -π/4 | | -1 | ∞ | π/2 | -π/2 | | -0 | -∞ | -π/2 | π/2 | | -0 | -1 | -π/2 | π/2 | | -0 | -0 | -π | NaN | | -0 | 0 | π | NaN | | -0 | 1 | π/2 | -π/2 | | -0 | ∞ | π/2 | -π/2 | | 0 | -0 | -0 | NaN | | 0 | 0 | 0 | NaN | | ∞ | -∞ | -π/4 | NaN | | ∞ | ∞ | π/4 | NaN |
Спецификации
Совместимость с браузерами
| Десктопные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
atan2 |
1 |
12 |
1 |
3 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
Смотрите также
Math.acos()Math.asin()Math.atan()Math.cos()Math.sin()Math.tan()- CSS
atan2()function
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan2