Получите углы в диапазоне от -180 до +180 - PullRequest
0 голосов
/ 28 июля 2010

Прежде чем я начну благодарить всех.

Через мое приложение я буду читать значения синхронизации, которые будут в углах.Когда я запускаю скрипт 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 ]

1 голос
/ 28 июля 2010
if -180 < x < 180:
    #do something

Это включает в себя -179 и 179 в диапазоне, но не -180 и 180.

0 голосов
/ 27 августа 2010

Если я вас правильно понимаю, у вас есть несколько углов, которые вы хотите убедиться, что они близки к целевому углу, учитывая определенный допуск, определяющий близость. Я думаю, что это то, что вам нужно:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...