python - 使 arctan2() 连续超过 2pi

标签 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)

绿色表示我想要的,黑色表示我得到的 enter image description here

最佳答案

您尝试做的通常称为“提升”...我使用的代码是

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)

两个“while”循环可以更隐蔽地压缩

    angle = (angle-last + math.pi)%(2*math.pi)-math.pi + last

关于python - 使 arctan2() 连续超过 2pi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41917393/

相关文章:

python - 如何禁止在 Python 中创建新的类属性?

python - 无法在本地主机上的 Django VirtualEnv 中访问 MySQL 数据库

python - 我可以更改之前创建的 matplotlib FuncAnimation 的间隔吗?

python - 在哪里调用对模型具有依赖性的外部 API?

python - Django 模型 'values()' 和 LEFT OUTER 连接

python - Numpy 向后兼容性 : Visual C++ 9 not found

python - 如何在 python 2.7 中使用 distutils 进行增量构建?

python - Pyomo "data = None"输出错误

python - SQLite操作错误: syntax for IF NOT EXISTS

python - 使用 Anaconda 安装 pygame