修复超过 180 度限制的二面角以创建平滑曲线

问题描述

我有一个商业程序的输出,其中包含分子的二面角。问题显然来自取余弦时的一个已知象限问题,即您的间隔是 -180 到 180,而我不熟悉。如果二面角大于 180,这个商业程序(SHARC,用于分子动力学模拟)理解它大于 -180,在图上创建跳跃(你可以在下图中看到一个例子)。

enter image description here

是否有正确的数学方法将这些图转换为平滑曲线,即使这意味着要达到高于 180 的二面角? 我正在尝试的是创建一个 python 程序来处理每个特殊情况,当从 180 到 -180 或反之亦然,如何通过使用正弦和余弦来处理接近 90 或 0 度的情况......但它是变得极其复杂,在通过 X 轴运行的 if 循环内有超过 12 个嵌套的 for 命令。 如果只有一个数字,我可以手工完成,但我会得到几十个类似的情节。 我附上一个 ascii 文件,用于绘制此图。

我希望它看起来像这样:

enter image description here

非常感谢,

贡萨尔维斯岛

解决方法

这称为相位展开。

由于您的曲线平滑且缓慢变化,因此每次看到较大的负(正)跳跃时,添加(减去)360。这将恢复原始曲线。 (对于跳跃阈值,我想 170 应该不错)。

,

好的,我找到了一个非常简单的解决方案。

Numpy 有 unwrap 函数。我只需要为函数提供一个以弧度为单位的角度的向量。 感谢 Yves 告诉我问题的名称。这帮助我找到了解决方案。