You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

倒Y轴下基于斜率计算足球传球角度的技术问题求助

问题分析

你遇到的核心问题是np.arctan()无法区分斜率对应的象限——它只能返回-90°到90°之间的角度,当传球轨迹落在第二、第三象限时,计算结果就会出现偏差。再加上Y轴倒置(正值向下)的特殊坐标系,直接用斜率计算角度的方式无法适配所有方向的传球。

解决方案

改用np.arctan2()函数计算角度,它会根据x、y方向的变化量(而非斜率)直接确定角度所在的象限,完美适配所有方向的轨迹计算。同时结合Y轴倒置的特性调整y方向的变化量:

修正后的代码

# 计算x、y方向的变化量(从A点到B点)
df['dx'] = df['X2'] - df['X']
# Y轴倒置,用A的Y减去B的Y,还原为正常坐标系的向上为正逻辑
df['dy'] = df['Y'] - df['Y2']

# 用arctan2计算弧度,参数顺序为(dy, dx)
df['Radians'] = np.arctan2(df['dy'], df['dx'])
# 转换为角度并约束在0-360°范围
df['Degrees'] = np.degrees(df['Radians']) % 360

测试用例验证

  • A(40,48) → B(27,70):dx=-13,dy=48-70=-22 → 计算得≈240°,落在预期的210-230°区间(误差源于预期范围的近似性)
  • A(27,74) → B(9,52):dx=-18,dy=74-52=22 → 计算得≈129.3°,符合130-140°的预期
  • A(9,64) → B(11,45):dx=2,dy=64-45=19 → 计算得≈83.9°,和原结果一致且符合预期
补充说明
  • np.arctan2(y, x)的参数顺序是y变化量在前,x变化量在后,注意不要搞反
  • 最终用%360将角度约束在0-360°范围内,方便后续判断传球方向:
    • 0°/360°、180°:横向传球
    • 0°-90°、270°-360°:可结合dy的正负进一步区分向前/向后传球
    • 90°-270°:对应另一方向的横向或前后传球

内容的提问来源于stack exchange,提问作者Carlos Lozano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 11:30:59