使 arctan2() 连续超过 2pi

Ind*_*igo 5 python python-2.7

我正在使用 python 2.7 处理加速度数据集,为了找到角度,我正在使用 arctan2(y,x)。我的问题是,虽然我的数据可以旋转超过 pi,但 arctan2(y,x) 的输出在 pi 和 -pi 之间有界。这意味着每当我超过 pi 时,我的数据都会突然出现戏剧性的跳跃并循环到负 pi。

我试图找出一个优雅的解决方案来解决这个问题并使我的图形连续。我已经实现了一个简单的检查,如果我什至跳过了大约 80% 的路径,我认为我已经越界并开始向每个后续数据点添加 2 pi。这有效,但感觉很笨重。有没有更优雅的方法来实现这一点?或者这是我能做的最好的吗?

谢谢^_^

for index in range(1,(len(x_data))):
    new_angle = math.atan2((y_data[index]), (x_data[index]))
    if (new_angle - angle[index-1]) > 5:
        new_angle = new_angle - 6.28
    if (new_angle - angle[index-1]) < -5:
        new_angle = new_angle + 6.28
    angle.append(new_angle)
Run Code Online (Sandbox Code Playgroud)

绿色代表我想要的,黑色代表我得到的 在此处输入图片说明

650*_*502 7

你想做的通常被称为“提升”......我使用的代码是

last = 0
out = []
for x, y in data:
    angle = math.atan2(y, x)
    while angle < last-math.pi: angle += 2*math.pi
    while angle > last+math.pi: angle -= 2*math.pi
    last = angle
    out.append(angle)
Run Code Online (Sandbox Code Playgroud)

两个“while”循环可以压缩为更神秘的形式

    angle = (angle-last + math.pi)%(2*math.pi)-math.pi + last
Run Code Online (Sandbox Code Playgroud)