当我在两个标题之间线性插值时,如何处理通过 360 度的情况?

问题描述 投票:0回答:1

我的Python程序的一部分在两个罗盘标题之间线性插值。只要我不必穿过北方,它就可以正常工作。 有没有好的方法来处理这种相当简单的插值? 例如,340 和 010 之间的中点应该是 355,而不是 175。提前致谢。

我正在使用 numpy.interp(x, xp, fp) 并且它通常可以工作。然而有时,我会得到 180 度的错误,例如标题 340 和 010 之间的插值。

python numpy navigation linear-interpolation heading
1个回答
0
投票

这是角度计算的常见问题,最常见的解决方法是添加尺寸。在这种情况下,如果它的正弦和余弦

,我们用向量替换你的角度
theta = np.array([340, 10])
theta = theta * np.pi / 180  #radians
theta_2d = np.array([np.sin(theta), np.cos(theta)])
avg = np.arctan2(*theta_2d.mean(1)) 
print((avg * 180 / np.pi) % 360)  # back to degrees, on the interval [0, 360)

355.0

此方法有一个特殊情况,即正好相距 180 度的角度的平均值将是未定义的:

arctan2(0, 0)
没有答案 - 但之前它有点未定义,因为有两个有效答案。

© www.soinside.com 2019 - 2024. All rights reserved.