math.atan2(y, x)

总是记不住math.atan2(y, x) 的计算得到的值对应什么情况,因此记录一下。

math.atan2(y, x) 的返回值范围是 [-π, π](即从 -180° 到 180°)。


源于:通义千问

具体说明:

  1. 范围解释

    • atan2(y, x) 返回的是点 (x, y) 与原点 (0, 0) 连线的向量与正 x 轴之间的夹角。
    • 角度以弧度为单位,范围为 [-π, π]
      • 0 表示正 x 轴方向。
      • π/2 表示正 y 轴方向。
      • π 表示负 x 轴方向。
      • -π/2 表示负 y 轴方向。
  2. 象限分布

    • 根据点 (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]
  3. 特殊情况

    • 当点位于坐标轴上时:
      • (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 函数无法区分象限的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值