Python 获取范围为-180到+;180

Python 获取范围为-180到+;180,python,math,Python,Math,在我开始感谢大家之前 通过我的应用软件s/w,我将读取以角度表示的同步值。 当我运行Python脚本时,值被收集到特定的变量中 假设范围为-180到180 我得到的角度是-180。根据要求,窗户应为+/-1度;ie;在179和-179之间 我将如何检查它是否落在该范围内 angle = -180 tolerance = 1 (in degree) if(180-1) <= -180 <= (-180+1): # statements angle1 = -179 t

在我开始感谢大家之前

通过我的应用软件s/w,我将读取以角度表示的同步值。 当我运行Python脚本时,值被收集到特定的变量中

假设范围为-180到180

我得到的角度是-180。根据要求,窗户应为+/-1度;ie;在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
角度=-180 公差=1(以度为单位) 如果(180-1)
if-180

这包括范围内的-179和179,但不包括-180和180

如果我理解正确,您有一些角度需要确保它们接近目标角度,给定定义接近度的特定公差。我想这就是你需要的:

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"
def restrict_角度(角度):
“确保任何角度都在[0..360)范围内”
返回角度%360
def几乎是角度(角度、目标角度、公差):
公差=abs(公差)#相同的含义,更容易逻辑
角度=限制角度(角度)
上限=限制角度(目标角度+公差)
下限=限制角度(目标角度-公差)
如果上限<下限:#当目标角度接近-180时
上限+=360

return(下限-1:“假设范围为-180到180。”代码应该符合要求。这是什么?为什么这么复杂?请检查我的答案,如果它是您所需要的,请相应地编辑您的问题以使其清楚,或者我可以为您这样做;只需提问。但python不知道这一点。如果此解决方案不符合您的要求,您必须更清楚地重申它们。T这取决于你的要求。这个。或者-180
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"