math.atan2(y, x)
总是记不住math.atan2(y, x)
的计算得到的值对应什么情况,因此记录一下。
math.atan2(y, x)
的返回值范围是 [-π, π]
(即从 -180° 到 180°)。
源于:通义千问
具体说明:
-
范围解释:
atan2(y, x)
返回的是点(x, y)
与原点(0, 0)
连线的向量与正 x 轴之间的夹角。- 角度以弧度为单位,范围为
[-π, π]
:0
表示正 x 轴方向。π/2
表示正 y 轴方向。π
或-π
表示负 x 轴方向。-π/2
表示负 y 轴方向。
-
象限分布:
- 根据点
(x, y)
所在的象限,atan2
会返回对应的角度:- 第一象限(
x > 0, y > 0
):角度范围[0, π/2]
。 - 第二象限(
x < 0, y > 0
):角度范围[π/2, π]
。 - 第三象限(
x < 0, y < 0
):角度范围[-π, -π/2]
。 - 第四象限(
x > 0, y < 0
):角度范围[-π/2, 0]
。
- 第一象限(
- 根据点
-
特殊情况:
- 当点位于坐标轴上时:
(x > 0, y = 0)
:返回0
(正 x 轴方向)。(x = 0, y > 0)
:返回π/2
(正 y 轴方向)。(x < 0, y = 0)
:返回π
或-π
(负 x 轴方向)。(x = 0, y < 0)
:返回-π/2
(负 y 轴方向)。
- 当点位于原点
(x = 0, y = 0)
时:- 返回值通常为
0
,但严格来说,原点没有方向,结果可能依赖于具体实现。
- 返回值通常为
- 当点位于坐标轴上时:
示例代码
以下代码展示了不同点的 atan2
值及其对应的象限和角度范围:
import math# 定义一些点
points = [(1, 0), # 正 x 轴(1, 1), # 第一象限(0, 1), # 正 y 轴(-1, 1), # 第二象限(-1, 0), # 负 x 轴(-1, -1), # 第三象限(0, -1), # 负 y 轴(1, -1) # 第四象限
]# 计算每个点的角度
for x, y in points:angle_radians = math.atan2(y, x)angle_degrees = math.degrees(angle_radians)print(f"点 ({x}, {y}): 弧度 = {angle_radians:.4f}, 角度 = {angle_degrees:.2f}°")
输出结果:
点 (1, 0): 弧度 = 0.0000, 角度 = 0.00°
点 (1, 1): 弧度 = 0.7854, 角度 = 45.00°
点 (0, 1): 弧度 = 1.5708, 角度 = 90.00°
点 (-1, 1): 弧度 = 2.3562, 角度 = 135.00°
点 (-1, 0): 弧度 = 3.1416, 角度 = 180.00°
点 (-1, -1): 弧度 = -2.3562, 角度 = -135.00°
点 (0, -1): 弧度 = -1.5708, 角度 = -90.00°
点 (1, -1): 弧度 = -0.7854, 角度 = -45.00°
总结
math.atan2(y, x)
的返回值范围是[-π, π]
。- 它的优点是可以自动处理所有象限,并避免了普通
atan
函数无法区分象限的问题。