Math.atan2()
基线 广泛可用
此功能非常成熟,可在许多设备和浏览器版本中使用。它从 2015 年 7 月.
报告反馈
试一试
语法
Math.atan2()
静态方法返回平面中 (以弧度表示) 正 x 轴与从 (0, 0) 到点 (x, y) 的射线之间的夹角,对于 Math.atan2(y, x)
。Math.atan2(y, x)
js
点的 x 坐标。
返回值
描述
正 x 轴与从 (0, 0) 到点 (x, y) 的射线之间的夹角,以弧度表示 (介于 -π 和 π 之间,含边界值)。
Math.atan2()
方法测量正 x 轴与点 (x, y)
之间的逆时针角 θ,以弧度表示。请注意,此函数的参数首先传递 y 坐标,然后传递 x 坐标。
点的 y 坐标。 |
参数 |
|
Math.atan2(y, x) |
---|---|---|---|
Math.atan(y / x) |
Math.atan(y / x) |
Infinity | π / 4 |
Math.atan(y / x) |
NaN |
-Infinity | π / 4 |
NaN |
Math.atan(y / x) |
-π / 4 | π / 4 |
NaN |
NaN |
3π / 4 | π / 4 |
0 | 0 | 0 | π / 4 |
0 | -0 | -0 | π / 4 |
-3π / 4 | 0 | < 0 (包括 -0 ) |
0 |
-3π / 4 | -0 | π | 0 |
NaN |
> 0 | < 0 (包括 -0 ) |
-0 |
-0 | > 0 | -π | π / 2 |
NaN |
< 0 | π | 0 |
-0 | < 0 | π / 2 | -π |
-π / 2-\frac{\pi}{2}.
\frac{\pi}{2}
示例
的角度。因为 atan2()
是 Math
的静态方法,所以您始终使用 Math.atan2()
,而不是作为您创建的 Math
对象的方法 (Math
不是构造函数)。
Math.atan2()
静态方法返回平面中 (以弧度表示) 正 x 轴与从 (0, 0) 到点 (x, y) 的射线之间的夹角,对于 Math.atan2(y, x)
。Math.atan2(90, 15); // 1.4056476493802699
Math.atan2(15, 90); // 0.16514867741462683
使用 Math.atan2()
Math.atan2(y, x) 和 Math.atan(y / x) 之间的区别
Math.atan2()
静态方法返回平面中 (以弧度表示) 正 x 轴与从 (0, 0) 到点 (x, y) 的射线之间的夹角,对于 Math.atan2(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} |`);
}
}
}
以下脚本打印所有导致 Math.atan2(y, x)
和 Math.atan(y / x)
之间存在差异的输入。
| 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 |
规范
输出为 |
---|
规范 # ECMAScript 语言规范 |
浏览器兼容性
sec-math.atan2