有没有一种安全的方法,可以用最少的案例语句简单地处理角度环绕。
当使用特定的角度表示法(0-360 度或 -180 - 180 度(或等效的弧度))并且您在角度上进行缠绕时,会发生角度缠绕。例如,假设您的角度为 -170,然后减去 50 度。您在数学上加起来是 -220,但实际上应该是 +140 度。
显然,您可以使用以下方法进行检查:
if (deg < -180) { 180 - abs(deg + 180); }
或类似的。但首先你需要大量的检查,其次如果你包装两次它就不起作用。
第二种普遍存在的情况是两个角度之间的插值。
例如,假设我有一个 -170 度和 160 度的角度,我想介于它们之间。一种常见的方法是 ang1 + 0.5(ang2-ang1)
但在我提供的示例中,它将导致角度为-5度,而它应该是175度。
在这些情况下是否有处理角度包络的常用方法?
原文由 Fantastic Mr Fox 发布,翻译遵循 CC BY-SA 4.0 许可协议
为了完整起见,我将包括
[0, 360)
和[-180, 180)
规范化。您将需要
#include <math.h>
。标准化为
[0,360)
:标准化为
[-180,180)
:该模式应该很容易识别以推广到弧度。
角平分:
这应该在“较小”一侧平分一个角度。 (警告:未完全测试)