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

如何处理线性插值两个航向时跨越360度的问题?

罗盘航向环形插值的解决方法

普通线性插值(比如numpy.interp)会把罗盘航向当成线性数值处理,忽略了0°/360°是同一个方向的环形特性,导致跨正北方向插值时出现180°误差。解决这个问题的核心是基于单位圆坐标的插值,步骤如下:

  • 把角度转换为单位圆上的笛卡尔坐标(余弦、正弦值),将环形问题转化为平面线性问题
  • 对余弦和正弦分量分别做线性插值
  • 将插值后的坐标转回角度,再映射到0°-360°范围

实现代码

import numpy as np

def circular_interp(x, xp, fp):
    # 转换角度为弧度,适配三角函数计算
    fp_rad = np.radians(fp)
    # 计算每个航向的cos、sin分量
    fp_cos = np.cos(fp_rad)
    fp_sin = np.sin(fp_rad)
    # 对两个分量分别执行线性插值
    interp_cos = np.interp(x, xp, fp_cos)
    interp_sin = np.interp(x, xp, fp_sin)
    # 将插值后的坐标转回角度(弧度转角度)
    interp_rad = np.arctan2(interp_sin, interp_cos)
    interp_deg = np.degrees(interp_rad)
    # 映射到0°-360°范围
    return interp_deg % 360

测试示例

# 测试340°到10°的中点插值
xp = [0, 1]
fp = [340, 10]
x = 0.5
print(circular_interp(x, xp, fp))  # 输出355.0

这个方法兼容numpy.interp的输入格式,支持单点或多点插值,所有场景下都会自动选择最短路径计算插值结果。

内容的提问来源于stack exchange,提问作者Phillip Dobbs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 01:51:02