Нам нужно определить, в каком направлении нужно двигаться, чтобы при движении из центра города попасть в отель. Координаты центра города и отеля нам известны.
Для решения задачи:
- Ставим точку центра города на бумажке.
- Строим через эту точку вертикальную и горизонтальную линии (оси x и y координат)
- Строим конечную точку (отель)
- Определяем в какой зоне координат находится конечная точка (в --, ++, -+, +-)
- Далее определяем угол между осью x и y
- Смотрим чему равен угол, < 45 - 45/2, > 45 + 45/2 или находится между
Код на языке python:
import math def get_direction_name((lng_city, lat_city), (lng_hotel, lat_hotel)): direction = get_direction((lng_city, lat_city), (lng_hotel, lat_hotel)) name = dict(DIRECTIONS)[direction] return name def get_direction((lng_city, lat_city), (lng_hotel, lat_hotel)): diff_lat = lat_hotel - lat_city diff_lng = lng_hotel - lng_city if math.fabs(diff_lng) > 180: diff_lng -= 360*diff_lng/math.fabs(diff_lng) is_mm = (diff_lat < 0) and (diff_lng < 0) and 1 or 0 is_pp = (diff_lat > 0) and (diff_lng > 0) and 1 or 0 is_mp = (diff_lat > 0) and (diff_lng < 0) and 1 or 0 is_pm = (diff_lat < 0) and (diff_lng > 0) and 1 or 0 if diff_lng: arg = math.fabs(diff_lat/diff_lng) degree = math.atan(arg)*180/math.pi else: degree = 90 on_diagonal = 45 - 45.0/2 < degree < 45 + 45.0/2 and 1 or 0 below_diagonal = degree < 45 - 45.0/2 and 1 or 0 above_diagonal = degree > 45 + 45.0/2 and 1 or 0 print is_pp, is_mm, is_pm, is_mp, on_diagonal, below_diagonal, above_diagonal direction_key = '{0}-{1}-{2}-{3}-{4}-{5}-{6}'.format( is_pp, is_mm, is_pm, is_mp, on_diagonal, below_diagonal, above_diagonal, ) direction = _direction_map[direction_key] return direction NORTH_EAST = 'north-east' NORTH_WEST = 'north-west' SOUTH_EAST = 'south-east' SOUTH_WEST = 'south-west' NORTH = 'north' SOUTH = 'south' EAST = 'east' WEST = 'west' DIRECTIONS = [ (NORTH_EAST, _(u'северо-восток')), (NORTH_WEST, _(u'северо-запад')), (SOUTH_EAST, _(u'юго-восток')), (SOUTH_WEST, _(u'юго-запад')), (NORTH, _(u'север')), (SOUTH, _(u'юг')), (EAST, _(u'восток')), (WEST, _(u'запад')), ] # Key: is_pp-is_mm-is_pm-is_mp-on_diagonal-below_diagonal-above_diagonal _direction_map = { '1-0-0-0-1-0-0': NORTH_EAST, '1-0-0-0-0-1-0': EAST, '1-0-0-0-0-0-1': NORTH, '0-1-0-0-1-0-0': SOUTH_WEST, '0-1-0-0-0-1-0': WEST, '0-1-0-0-0-0-1': SOUTH, '0-0-1-0-1-0-0': SOUTH_EAST, '0-0-1-0-0-1-0': EAST, '0-0-1-0-0-0-1': SOUTH, '0-0-0-1-1-0-0': NORTH_WEST, '0-0-0-1-0-1-0': WEST, '0-0-0-1-0-0-1': NORTH, }
Комментариев нет:
Отправить комментарий