Перекрытие диапазона в секторе 360 в Python - PullRequest
0 голосов
/ 26 июня 2019

Круг в 360 радиан разделен секторами на 30 градусов. Есть датчики, посылающие волны с ограниченным углом. Пример данных, как показано ниже. Это означает, что датчик 1 посылает волну между 243 и 319 градусами, а датчик2 может отправлять волну под двумя углами, от 63 до 139 и от 241 до 305.

sensordata = pd.DataFrame({'sensor':['sensor1','sensor2','sensor2'], 'lower_bound':[243,63,241],'upper_bound':[319,139,305]})
    sensor  lower_bound  upper_bound
0  sensor1          243          319
1  sensor2           63          139
2  sensor2          241          305
.......

То, что я хочу - это определить в каждом секторе, какой датчик может посылать волну, то есть волна датчика пересекается с этим сектором. Например, в секторе 0-30 нет датчика, а 30-60, а датчик 2 должен быть истинным в секторе 60-90 и т. Д.

sector 0, none
sector 30, none
sector 60, sensor2
sector 90, sensor2
......
sector 210, none
sector 240, sensor1 and sensor2,
......

Я попробовал приведенный ниже код. Он всегда пропускает первый правильный сектор, например, в секторе 60-90, sensor2 должен быть True, однако приведенный ниже код ничего не дает для этого сектора. Любое предложение, чтобы исправить это? Спасибо.

        for sector in np.arange(0, 360, 30):
            affected_sensor = sensordata[sensordata.lower_bound <= sector]
            affected_sensor = affected_sensor[affected_sensor.upper_bound >= sector]
            print(sector, affected_sensor)

1 Ответ

0 голосов
/ 26 июня 2019

Ты делаешь это слишком сложно. Найти нижнюю и верхнюю границы в виде номеров секторов путем прямого вычисления:

sec_lower = sector_data.lower_bound // 30
sec_upper = sector_data.upper_bound // 30
sector_coverage = list(range(sec_lower, sec_upper+1))

Это дает вам список секторов, охватываемых датчиком, используемым в данный момент. Это просто накапливать в предпочитаемой вами организации. Если у вас есть какие-либо датчики, превышающие 360, обрабатывайте этот особый случай в зависимости от вашего представления данных. Вы не указали эту запись, поэтому я не могу написать решение.

...