获取-180到+180范围内的角度

-5 投票
2 回答
2655 浏览
提问于 2025-04-16 01:57

在我开始感谢大家之前。

通过我的应用软件,我会读取同步值,这些值是角度。

当我运行Python脚本时,这些值会被收集到特定的变量中。

假设这个范围是从-180到180。

如果我得到的角度是-180。根据要求,它应该在+/-1度的范围内;也就是说,应该在179和-179之间。

我该如何检查这个角度是否在这个范围内呢?

angle = -180
tolerance = 1 (in degree)
if(180-1) <= -180 <= (-180+1):
       # statements



angle1 = -179
tolerance = 1
if(-170-1)<= -179 <= (-179+1):
      # statements



angle2 = 179
tolerance = 1
if(179-1) <= 179 <= (179+1):
         # statements

这样的方法对所有角度组合都有效吗?你觉得呢?

2 个回答

0

如果我理解得没错,你有一些角度,想要确保它们接近一个目标角度,并且有一个特定的容差来定义这种接近程度。我觉得你需要的是这个:

def restrict_angle(angle):
    "make sure any angle falls in the [0..360) range"
    return angle % 360

def is_angle_almost(angle, target_angle, tolerance):

    tolerance= abs(tolerance) # same meaning, easier logic

    angle= restrict_angle(angle)
    upper_limit= restrict_angle(target_angle + tolerance)
    lower_limit= restrict_angle(target_angle - tolerance)

    if upper_limit < lower_limit: # when target_angle close to -180
        upper_limit+= 360

    return (lower_limit <= angle <= upper_limit
        or lower_limit <= angle + 360 <= upper_limit)

if __name__ == "__main__":
    for test in (
        ( (90, 92, 3), True),
        ( (90, 92, -3), True),
        ( (90, 92, -1), False),
        ( (180, 181, 1), True),
        ( (180, 182, 1), False),
        ( (179, -180, 1), True),
        ( (-175, 180, 6), True),
        ( (-175, 180, 4), False),
        ( (4, 0, 5), True),
    ):
        if is_angle_almost(*test[0]) != test[1]:
            print ("fails for " + str(test[0]))
            break
    else:
        print "all tests successful"

你将要使用的函数是 is_angle_almost

1
if -180 < x < 180:
    #do something

这段话的意思是,范围里包括了-179和179这两个数字,但不包括-180和180。

撰写回答