如何优雅地查找角度是否在范围之间?

Sel*_*lva 4 python math angle

例如,如果我的角度是 20 度,我可以检查它是否在 [0, 40] 范围内,如下所示:

lower = 0
upper = 40
if angle > lower and angle < upper:
        print('done')
Run Code Online (Sandbox Code Playgroud)

然而,如果我的范围跨越 360 度边界(例如下=350 和上=40),这个逻辑将不起作用。我知道我可以用额外的 if/else 块来处理这个问题,但是有什么优雅的方法吗?

Thi*_*lle 8

检查 是否alpha介于lower和 之间的一个简单方法upper是测量 的模 360 的角度lower。这为我们提供了 0 到 360 之间的正值。

我们只需检查 (alpha - lower) modulo 360 是否小于 (upper - lower) modulo 360,如插图所示:

阿尔法范围:

范围内的阿尔法

阿尔法超出范围:

在此输入图像描述

def angle_in_range(alpha, lower, upper):
    return (alpha - lower) % 360 <= (upper - lower) % 360


tests = [(25, 20, 40), (15, 20, 40), (45, 20, 40), (10, 350, 20), (-5, 350, 20), (365, 350, 20), (330, 350, 20)]
for alpha, lower, upper in tests:
    print(f'{alpha} between {lower} and {upper}: {angle_in_range(alpha, lower, upper)}')

# 25 between 20 and 40: True
# 15 between 20 and 40: False
# 45 between 20 and 40: False
# 10 between 350 and 20: True
# -5 between 350 and 20: True
# 365 between 350 and 20: True
# 330 between 350 and 20: False
Run Code Online (Sandbox Code Playgroud)